テキストファイル内のデータの各行を並べ替え(ソート)をするには「sort」コマンドを実行します。
「sort」コマンドの使い方(Linux)
「sort」コマンドはテキストファイル内のデータを並び替えて表示します。
以下のように「sort_test01」というファイルのデータがあります。
それぞれ各業に文字列や数字が設定されています。
$ cat sort_test01 test03 3 2 1 test01 60 50 40 test02 9 80 70 y b e c n m z a h g i k
「sort」コマンド指定したファイルの各業の全ての「フィールド」を対象に変えて表示します。
この「フィールド」は「スペース」や「タブ」で区切られたテキストの部分となります。
$ sort sort_test01 test01 60 50 40 test02 9 80 70 test03 3 2 1 y b e c n m z a h g i k
「sort」コマンドのデフォルトの並び替えルール
並び替えのルールは以下となります。
- 数字:数の小さい順に並び替え
- アルファベット:アルファベット順に並び替え
- 数字とアルファベットは数字が上位表示として優先される
2桁以上の数字を「sort」する場合は「-n」オプションを使用する
以下のように数字のデータをソートする際、デフォルトだとアルファベット順となってしまいますので、「6」、「8」、「11」より、「101」が先に並び替えられます。
$ sort sort_test02 101 1 11 777 333 22 6 1000 666 555 8 5 999 182
このように2桁以上の数字で並び替えをする際は「-n」オプションを使用します。
$ sort -n sort_test02 6 1000 8 5 11 777 101 1 333 22 666 555 999 182
ちなみに「-n」オプションを使用すると、アルファベットが上位表示となります。
$ sort -n sort_test02 a test2 o test1 6 1000 8 5 11 777 101 1 333 22 666 555 999 182
「sort」コマンド「フィールド」指定した並び替え
以下では、「sort」コマンドを使用して、「フィールド1」を指定した並べ替えをした実行例となります。
$ sort -n -k 1 sort_test01 test01 60 50 40 test02 9 80 70 test03 3 2 1 y b e c n m z a h g i k
アルファベット順に並び替えられ、同じ文字列に対しては数字の小さい方が優先で上位表示されています。
「フィールド2」を指定した並び替え
以下はスペース区切りで2番目のフィールドを指定して「sort」を表示した例となります。
「-n」で数字を指定し、「3」の数字が上位に表示されるようになります。
$ sort -n -k 2 sort_test03 test03 3 2 1 test02 9 80 70 test01 60 50 40
「sort」を逆に表示
以下は「sort」の昇降順を逆に表示した例となります。
2番目のフィールドで一番大きな数字の「60」が上位表示されています。
$ sort -r -n -k 2 sort_test3 test01 60 50 40 test02 9 80 70 test03 3 2 1
「sort」コマンドでフィールドの文字区切りを指定
以下のようにIPアドレスのテキストファイルのデータがあります。
$ cat ip_address 10.1.1.100 192.168.3.1 172.17.0.10 10.1.1.2 11.1.2.2 10.1.1.15
このデータを数字の小さな順から「sort」をかけると以下のように数字の小さな順から並び替えることができません。
$ sort ip_address 10.1.1.100 10.1.1.15 10.1.1.2 11.1.2.2 172.17.0.10 192.168.3.1
デフォルトのフィールドの区切りは「スペース」や「タブ」を今回は「.」ドット区切りで並び替えるようにします。
以下はIPアドレスの第1オクテット〜第4オクテットの順で数字の小さい方から上位表示した例となります。
$ sort -t'.' -k1,1n -k2,2n -k3,3n -k4,4n ip_address 10.1.1.2 10.1.1.15 10.1.1.100 11.1.2.2 172.17.0.10 192.168.3.1
「sort」コマンドオプション
sortコマンドのオプションは以下の通りとなります。
$ sort --help 使用法: sort [OPTION]... [FILE]... または: sort [OPTION]... --files0-from=F Write sorted concatenation of all FILE(s) to standard output. FILE の指定がなかったり, - であった場合, 標準入力から読み込みます. Mandatory arguments to long options are mandatory for short options too. 並び替えオプション: -b, --ignore-leading-blanks 先頭の空白を無視する -d, --dictionary-order 空白および英数字のみ含まれていると仮定する -f, --ignore-case 大文字・小文字を区別しない -g, --general-numeric-sort compare according to general numerical value -i, --ignore-nonprinting consider only printable characters -M, --month-sort compare (unknown) < 'JAN' < ... < 'DEC' -h, --human-numeric-sort 人間が読むことができる形式の数値を比較する (例: 2K 1G) -n, --numeric-sort compare according to string numerical value -R, --random-sort shuffle, but group identical keys. See shuf(1) --random-source=FILE get random bytes from FILE -r, --reverse reverse the result of comparisons --sort=WORD WORD に応じてソートする。WORD の候補は次の通り: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V -V, --version-sort 自然な (バージョン) 数字順でソートする そのほかのオプション: --batch-size=NMERGE 一度に最大 NMERGE 行、併合を行う。それ以上の場合 は一時ファイルが使用される -c, --check, --check=diagnose-first 入力がソートされているかを確認する。ソート は行わない -C, --check=quiet, --check=silent -c と同様だが、正しくソートされていない最初 の行を出力しない --compress-program=PROG PROG を使用して一時ファイルを圧縮し、PROG -d を 使用して展開する --debug ソートに使用されている行の一部に注釈をつけて、不確かな 使用方法について標準エラー出力に警告を表示する --files0-from=F ファイル F に含まれた NULL 文字で区切られた文字列を ファイル名として扱い、それらのファイルの中身を入力行 として読み込む。ファイル F に - を指定した時は、ファ イル名を標準入力から読み込む -k, --key=KEYDEF sort via a key; KEYDEF gives location and type -m, --merge merge already sorted files; do not sort -o, --output=FILE 結果を標準出力の代わりに FILE に書き込む -s, --stable 前の比較結果に頼らない安定的な並び替えを行う -S, --buffer-size=SIZE 主記憶のバッファの大きさとして SIZE を使用する -t, --field-separator=SEP フィールド区切り文字として空白の代わりに SEP を使用する -T, --temporary-directory=DIR 一時ディレクトリとして $TMPDIR または /tmp ではなく DIR を使用する。オプションを複数指定すると、複数のディ レクトリを指定できる --parallel=N 同時に実行するソートの数を N に変更する -u, --unique -c と併せて使用した場合、厳密に順序を確認する。-c を付け ずに使用した場合、最初の同一行のみ出力する -z, --zero-terminated line delimiter is NUL, not newline --help この使い方を表示して終了する --version バージョン情報を表示して終了する KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end. If neither -t nor -b is in effect, characters in a field are counted from the beginning of the preceding whitespace. OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which override global ordering options for that key. If no key is given, use the entire line as the key. Use --debug to diagnose incorrect key usage. SIZE may be followed by the following multiplicative suffixes: % 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y. *** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values. GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report sort translation bugs to <https://translationproject.org/team/> Full documentation at: <https://www.gnu.org/software/coreutils/sort> or available locally via: info '(coreutils) sort invocation'
「sort」コマンドの使い方は以上となります。
エンジニアのオンライン学習
エンジニアにおすすめのオンライン教材比較 | |
ITエンジニアが自宅で学習ができるオンラインスクール比較 | |