ソート – UNIXで1列だけでソートするには?

sorting unix

私は、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

Unix および Linux システム管理ハンドブックより

sort は -k3 (-k3,3 ではなく -k3) を受け入れますが、おそらく期待しているようなことはしないでしょう。終了フィールド番号を指定しないと、ソートキーは行末まで続きます

10  tidbeck  2012-10-16


提供された回答のどれも、私にとっては一般的には機能しません

sort -s -k 2 file1sort -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


タイトルとURLをコピーしました