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で「ソート」コマンドを使用してこの同じ結果を取得する方法を知りたいです。
sort --field-separator=';' --key=2,1,3
上記のチャーリーの答えは、Cygwin(sort version 2.0、GNU textutils)では機能しませんでしたが、次のように機能しました:
sort -t"," -k2 -k1 -k1
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
のみが使用されるようにします。