私は、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
ただ、2列目の順番はこんな感じでキープしたいですね
1 2
1 1
2 3
2 2
2 1
sort
コマンドで可能ですか?
49 ssn 2009-08-31
これを試してみてください
sort -s -n -k 1,1
-s
は ‘最後の最後の砦’ ソートを無効にします
-k 1
は、2列目でソートしようとするとわかるように、数値ソートの文脈では実際には「このフィールドとそれに続くすべてのもの」という意味ではありません。単に、残りの行に行くことで紐が切れているのを見ているだけです。しかし、一般的には、フィールド1のみでソートするには-k 1,1
を指定する必要があります
71 Cascabel 2009-08-31
最初の列だけをソートするには、あなたがすべきことです
sort -n -s -k1,1
sort は -k3 (-k3,3 ではなく -k3) を受け入れますが、おそらく期待しているようなことはしないでしょう。終了フィールド番号を指定しないと、ソートキーは行末まで続きます
10 tidbeck 2012-10-16
提供された回答のどれも、私にとっては一般的には機能しません
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
2 user680341 2016-12-30