coreutilsはソート時に空のキーを無視します。

coreutilsはソート時に空のキーを無視します。

sort -kを使用するときにnullキーのソート順序をどのように無視または変更できますか?

# cat afile
a  b
11 20
93 45
55
26
09 31

下の空の列bの値を次のように並べ替えるにはどうすればよいですか?

a  b
11 20
09 31
93 45
26
55

これが私が得るものです:

sort -k 2b tmp/file
26
55
11 20
09 31
93 45

答え1

空のフィールドに特殊なソートキーを追加し、ソート後に再度削除できます。キーは入力データに表示しないでください。各(数値)値より大きくなければなりません。

たとえば、

$ awk '$2 ~ /^$/ { print $1, "XXX"; next; } {print $0 }' f \
    | sort -k2b
    | sed 's/XXX$//'
11 20
09 31
93 45
26 
55

答え2

別の方法:

awk '{print NF, $0}' | sort -k1,1rn -k3 | cut -d' ' -f2-

つまり、フィールド数を含む別の列を追加し、最初に反対数のフィールドに基づいてソートします。

関連情報