Linux排序:如何以数字方式排序,但将空单元格留在最后

时间:2015-01-19 05:08:38

标签: linux sorting gnu rank

我有这些数据要排序。第1列是商品ID。第2列是数值。有些项目没有数值。

03875334    -4.27
03860156    -7.27
03830332    
19594535    7.87
01542392    -5.74
01481815    11.45
04213946    -10.06
03812865    -8.67
03831625    
01552174    -9.28
13540266    -8.27
03927870    -7.25
00968327    -8.09

我想使用Linux sort命令按照值的升序以数字方式对项目进行排序,但将这些空项保留到最后。所以,这是我想要获得的预期输出:

04213946    -10.06
01552174    -9.28
03812865    -8.67
13540266    -8.27
00968327    -8.09
03860156    -7.27
03927870    -7.25
01542392    -5.74
03875334    -4.27
19594535    7.87
01481815    11.45
03830332    
03831625    

我尝试了“sort -k2n”和“sort -k2g”,但都没有产生我想要的输出。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

假设数据在d.txt中,空白在末尾有4个空格

egrep "    $" d.txt > blanks.txt ; egrep -v "    $" d.txt | sort -n -k2 | cat - blanks.txt

答案 1 :(得分:2)

这是一个简单的Schwartzian transform,基于所有实际值都小于123456789的假设。

awk '{ printf "%s\t%s", ($2 || 123456789), $0 }' file |
sort -n | cut -f2- >output

答案 2 :(得分:0)

这应该有效:

awk '$2 ~ /[0-9]$/' d.txt | sort  -k2g && awk '$2 !~ /[0-9]$/' d.txt