ソートされたデータを含むファイルがあり、別のキーのデータ順序を破壊することなく、1つのキーの値に基づいてファイルを並べ替えたいと思います。
GNUソートが私が指定しなかったキー値に基づいて行ソートを実行するのを防ぐにはどうすればよいですか?または、ソート時にGNUソートがキー範囲を無視するように指定するにはどうすればよいですか?
ファイルデータ.txt:
1 Don't
2 C
1 Sort
2 B
1 Me
2 A
予想出力:
1 Don't
1 Sort
1 Me
2 C
2 B
2 A
注文する:
sort -k 1,1 <data.txt
結果:私が要求した不要なソートはありません。
1 Don't
1 Me
1 Sort
2 A
2 B
2 C
答え1
あなたが必要です安定したソート。からman sort
:
-s, --stable
stabilize sort by disabling last-resort comparison
今すぐ:
$ sort -sk 1,1 <data.txt
1 Don't
1 Sort
1 Me
2 C
2 B
2 A
キーが数値の場合、-n
またはが必要になる場合--numeric-sort
があります(たとえば、デフォルトの語彙ソート順序を使用して10と2を比較すると、予期しない結果が発生する可能性があります)。この場合は、次のようにします。
sort -sn <data.txt
行全体の数値解析は最初のフィールドの数値解析と同じであるため、最初のフィールドを抽出する必要はありません。
答え2
optionsが不足している(GNUではない)sort
実装では、-s
いつでも次のことができます。
<data.txt awk '{print NR "\t" $0}' | sort -n -k 2,2 -k 1,1 | cut -f 2-
つまり、行番号の前に2番目のソートキーを作成してから削除します。