たとえば、テストファイルがありますが、列の値に基づいてソートしたいと思います。後ろに
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は+
それぞれに追加される:
か、列区切り記号,
で+
ソートされ、次の項目が削除されます+
。