coreutils 排序时忽略空白键

coreutils 排序时忽略空白键

使用 sort -k 时如何忽略或有没有办法更改空键的排序顺序?

# 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-

即添加另一列包含字段数,并首先按相反的字段数排序。

相关内容