使用Bash的sort -gr命令排序时遇到的问题
解决浮点数键值对的降序排序问题
你的问题根源在于原始输入是单行的空格分隔元素,而sort默认是按行处理的,所以直接用sort -gr -k 2只会把整行当作一个单元,自然没法按你想要的第二列数值排序。
正确的命令组合
先把单行的键值对拆成每行一组,再进行数值排序:
cat b.txt | xargs -n2 | sort -k2,2nr
执行这个命令后,就能得到你期望的结果:
c 0.62 z -0.004 m -0.3 b -0.44 a -0.51
各部分命令的作用
xargs -n2:把输入的空格分隔元素,每2个分为一行输出,这样每个字母和对应的数值就变成了独立的一行,让sort能识别到单独的列。sort -k2,2nr:-k2,2:明确指定只对第二列进行排序(避免误包含后续列,这里虽然只有两列,但养成精确指定列范围的习惯更好)-n:按数值大小排序(完美支持浮点数)-r:反转排序结果,实现降序排列
为什么之前的命令无效?
你之前用sort -gr -k 2或sort -nr时,输入还是一整行,sort只会把这一行作为一个整体处理,根本没机会解析到第二列的数值,所以才会出现按字母顺序排序的错误结果。
内容的提问来源于stack exchange,提问作者Swimming bird
相关产品推荐
相关产品推荐

