UNIXで1カラムのみでソートするには?
私は、Unixの sort のための-kオプションを使用すると、特定の列と以下のすべてでソートすることができることを知っています。例えば、入力ファイルがあるとします。
2 3
2 2
1 2
2 1
1 1
sort -n -k 1
を使うと、1列目でソートされた後に2列目でソートされた出力が得られます:
1 1
1 2
2 1
2 2
2 3
となります。
1 2
1 1
2 3
2 2
2 1
これはsort
コマンドで可能ですか?
私は、Unixの sort のための-kオプションを使用すると、特定の列と以下のすべてでソートすることができることを知っています。例えば、入力ファイルがあるとします。
2 3
2 2
1 2
2 1
1 1
sort -n -k 1
を使うと、1列目でソートされた後に2列目でソートされた出力が得られます:
1 1
1 2
2 1
2 2
2 3
となります。
1 2
1 1
2 3
2 2
2 1
これはsort
コマンドで可能ですか?
最初の列だけをソートするには、以下のようにします。
sort -n -s -k1,1
From Unix and Linux System Administration Handbook
sort はキー指定 -k3 を受け入れますが、おそらくあなたが期待しているようなことはしないでしょう。終了フィールド番号がない場合、ソートキーは行末まで続きます。
提供された回答のどれも、私にとっては一般的には機能しません。
sort -s -k 2 file1
と sort -n -k1,1
の両方がこのファイルで追加のソートを行います。
# cat file1
3 3 5
3 2 3
1 4 7
0 1 2
3 2 1
私はこれと全く同じことをしなければならず、結局シェルループを使うことになりました。ソートされた列の一意の値ごとにファイル全体を読み込む必要があるため、この解決策は非常に大きなファイルではうまくいかないかもしれません。
ここでは、ファイルは2列目のみでソートされています。
# awk '{print $2}' file1 | sort | uniq | while read index
do
awk -v var=$index '$2 == var { print $0}' file1
done
0 1 2
3 2 3
3 2 1
3 3 5
1 4 7