web-dev-qa-db-ja.com

「並べ替え」コマンドを使用して、CSVファイルを列の優先度で並べ替えます

Csvファイルがあり、「order by」などの列の優先度で並べ替えたいと思います。例えば:

3;1;2
1;3;2
1;2;3
2;3;1
2;1;3
3;2;1

この状況が「select」の結果である場合、「order by」は次のようになります。

2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1

Unixで「ソート」コマンドを使用してこの同じ結果を取得する方法を知りたいです。

78
Rafael Orágio
sort --field-separator=';' --key=2,1,3
128
Charlie Martin

上記のチャーリーの答えは、Cygwin(sort version 2.0、GNU textutils)では機能しませんでしたが、次のように機能しました:

sort -t"," -k2 -k1 -k1
24
Samuel Kerrien

3;10;3ファイルに別の行unsorted.csvがあるとします。次に、数値的にソートされた結果が期待されると思います。

2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
3;10;3

アルファベット順にソートされたものではありません:

2;1;3
3;1;2
3;10;3
1;2;3
3;2;1
1;3;2
2;3;1

それを取得するには、-nを使用する必要があります。

sort --field-separator=';' -n -k 2,2 -k 1,1 -k 3,3 unsorted.csv

2,2を使用する必要があることに言及する価値があります。 2のみを使用する場合、sortはフィールド2の先頭から末尾まで文字列を取ります。 2,2は、フィールド2のみが使用されるようにします。

22
Martin Thoma