sortコマンドは、カンマ区切りデータ(CSV)や、タブ区切りデータ(TSV)の指定のフィールド(列)でソート出来ます。
またフィールド(列)は複数指定でき、それぞれ数値か文字列でのソートかも指定できます。
このようなソートを行うためのsortコマンドの使い方についてです。
オプション
各フィールド(列)のセパレーターの指定
デフォルトは空白区切りですが、セパレーターを空白以外にする場合は、-t オプションで指定します。
CSV の場合は、「-t ,」とします。
TSV の場合は、「-t $’\t’」 とします。$ を付け忘れないでください。
ソート対象のフィールド(列)の指定
-k オプションでソート対象のフィールド(列)を指定します。
何番目のフィールド(列)をソート対象とするかを番号で指定します。番号は1番から数えます。
manコマンドでは 0番からと説明されていますが、実際は1番からです。
-k POS1[,POS2] の書式で、’POS1’列から’POS2’列が対象になります。POS2 が省略された場合は、行末までの列になります。
複数フィールド(列)を指定する場合は、-k オプションを列挙します。
ソート方法が数値/文字列かの指定
デフォルトは文字列ソートです。
数値としてソートする場合は、-kオプションの最後に n を付けます。
-n オプションを指定すると、全てのフィールド(列)を数値としてソートします。
ソート例
サンプルファイルの内容
CSVファイル test2.csv
1,grape,99 3,orange,100 10,apple,555 5,banana,-5 2,kiwi,-9 7,pineapple,555
TSVファイル test2.tsv
1 grape 99 3 orange 100 10 apple 555 5 banana -5 2 kiwi -9 7 pineapple 555
例)TSVファイルの2列目を文字列としてソートする
$ sort -t $'\t' -k2,2 test2.tsv 10 apple 555 5 banana -5 1 grape 99 2 kiwi -9 3 orange 100 7 pineapple 555
TSV形式なので、各フィールド(列)のセパレーターがタブであることを -t $’\t’ で指定します。
-k2,2 で2列目を指定します。
-nオプションや -kにnオプションが無いので、デフォルトの文字列ソートが行われます。
例)CSVファイルの3列目を数値としてソートする
$ sort -t , -k3,3n test2.csv 2,kiwi,-9 5,banana,-5 1,grape,99 3,orange,100 10,apple,555 7,pineapple,555
CSV形式なので、各フィールド(列)のセパレーターがカンマであることを -t , で指定します。
-k3,3 で3列目を指定します。
-kにnオプションを付けているので、3列目で数値ソートが行われます。
例)CSVファイルの3列目を文字列としてソートする
$ sort -t , -k3,3 test2.csv 5,banana,-5 2,kiwi,-9 3,orange,100 10,apple,555 7,pineapple,555 1,grape,99
CSV形式なので、各フィールド(列)のセパレーターがカンマであることを -t , で指定します。
-k2,2 で2列目を指定します。
-n や -kにnオプションが無いので、デフォルトの文字列ソートが行われます。
例)CSVファイルの3列目,1列目の順で数値としてソートする
$ sort -t , -k3,3n -k1,1n test2.csv 2,kiwi,-9 5,banana,-5 1,grape,99 3,orange,100 7,pineapple,555 10,apple,555
CSV形式なので、各フィールド(列)のセパレーターがカンマであることを -t , で指定します。
-k3,3 と -k1,1 で3列目、1列目の順でのソートを指定します。
-kにnオプションを付けているので、数値ソートが行われます。
コメント