我有一个包含下表的 txt 文件
3-6-13 0.0712 ./13-t.xyz
3-6-13 0.0717 ./2-t.xyz
3-6-13 0.3737 ./6-t.xyz
3-6-13 0.5862 ./5-t.xyz
3-6-13 0.7503 ./4-t.xyz
我如何根据第三列对其进行排序:
3-6-13 0.0717 ./2-t.xyz
3-6-13 0.7503 ./4-t.xyz
3-6-13 0.5862 ./5-t.xyz
3-6-13 0.3737 ./6-t.xyz
3-6-13 0.0712 ./13-t.xyz
不幸的是我不能使用 sort 的 -v 选项;
sort -v -k 3 out.tmp
还有其他通过 awk sed 等解决的解决方案吗?
答案1
您可以使用 Schwartzian 变换:将数字提取到单独的字段,对其进行排序,然后将其删除
$ sed -r 's/(.*\/)([0-9]+)/\2 \1\2/' table.txt | sort -n -k1,1 | cut -d" " -f2-
3-6-13 0.0717 ./2-t.xyz
3-6-13 0.7503 ./4-t.xyz
3-6-13 0.5862 ./5-t.xyz
3-6-13 0.3737 ./6-t.xyz
3-6-13 0.0712 ./13-t.xyz
答案2
sort --numeric-sort --ignore-leading-blanks -k3.3 "${File}"
参考:密钥来自man sort
输出
3-6-13 0.0717 ./2-t.xyz
3-6-13 0.7503 ./4-t.xyz
3-6-13 0.5862 ./5-t.xyz
3-6-13 0.3737 ./6-t.xyz
3-6-13 0.0712 ./13-t.xyz