列値に基づいて数値順に並べ替え

列値に基づいて数値順に並べ替え

たとえば、テストファイルがありますが、列の値に基づいてソートしたいと思います。後ろに

awk -F'[:,]' '{print $16}' test.json

列 16 の次の出力を取得します。

 123
 457
 68
 11
 939
 11
 345
 9
 199
 13745

ここで、数字で並べ替えたい場合は、次のようにします。

awk -F'[:,]' '{print $16}' test.json | sort -nk16

しかし、数値ソートの代わりに再インポートされます...

 11
 11
 123
 13745
 199
 345
 457
 68
 9
 939

理由は何ですか-n

答え1

の出力にはawk列が1つしか含まれていないため、列16はありません。

したがって、sortすべて同じ空のソートキーを見ると、観察されるのは最後の種類のソート(全体行の語彙ソート)の結果であり、一部の-s実装ではこのオプションを使用して無効にすることができます。

希望する場所は次のとおりです。

awk -F'[:,]' '{print $16}' test.json | sort -n

列16でファイルをソートするには、sort文字列区切り文字が1つだけサポートされているため、入力を前処理する必要があります。

sed 's/[:,]/&+/g' test.json | sort -t+ -k16,16n | sed 's/\([:,]\)+/\1/g'

ここで、aは+それぞれに追加される:か、列区切り記号,+ソートされ、次の項目が削除されます+

関連情報