输出

输出

我有一个包含下表的 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

相关内容