Linux 排序:如何按数字排序但将空单元格留到最后
Linux sort: how to sort numerically but leave empty cells to the end
我要整理这些数据。第一列是项目 ID。第二列是数值。有些项目没有数值。
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 排序命令按数值升序对项目进行排序,但将那些空项目留在最后。所以,这是我想要获得的预期输出:
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",但都没有产生我想要的输出。有什么想法吗?
假设数据在 d.txt 中,空格末尾有 4 个空格
egrep " $" d.txt > blanks.txt ; egrep -v " $" d.txt | sort -n -k2 | cat - blanks.txt
这应该有效:
awk ' ~ /[0-9]$/' d.txt | sort -k2g && awk ' !~ /[0-9]$/' d.txt
这里是一个简单的Schwartzian transform基于所有实际值都小于123456789的假设。
awk '{ printf "%s\t%s", ( || 123456789), [=10=] }' file |
sort -n | cut -f2- >output
我要整理这些数据。第一列是项目 ID。第二列是数值。有些项目没有数值。
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 排序命令按数值升序对项目进行排序,但将那些空项目留在最后。所以,这是我想要获得的预期输出:
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",但都没有产生我想要的输出。有什么想法吗?
假设数据在 d.txt 中,空格末尾有 4 个空格
egrep " $" d.txt > blanks.txt ; egrep -v " $" d.txt | sort -n -k2 | cat - blanks.txt
这应该有效:
awk ' ~ /[0-9]$/' d.txt | sort -k2g && awk ' !~ /[0-9]$/' d.txt
这里是一个简单的Schwartzian transform基于所有实际值都小于123456789的假设。
awk '{ printf "%s\t%s", ( || 123456789), [=10=] }' file |
sort -n | cut -f2- >output