排序使用问题

排序使用问题

我有一个这样的文件垃圾:

Y10 122.894054 7.653405
B3 124.406526 8.281803
B3' 125.000684 8.389677
A11 102.801917 9.288624
A11' 127.661564 8.216719
D4 117.182791 7.418388

我想按数字对第一列进行排序,如下所示:

B3 124.406526 8.281803
B3' 125.000684 8.389677
D4 117.182791 7.418388
Y10 122.894054 7.653405
A11 102.801917 9.288624
A11' 127.661564 8.216719

我使用这个命令,但对我不起作用:

sort -k1,23 -k1n junk

答案1

在第一个数字之前暂时添加一个(希望)唯一的分隔符(例如“#”):

sed 's/^\([^0-9]*\)/\1#/' junk | sort -t '#' -k 2n,2 | tr -d '#'

这是一般情况,我对任何文本文件中的第一个数字进行排序,该文本文件在第一个数字之前不包含“#”。

如果您喜欢的话,您还可以使用更奇特的分隔符:

SEP=`printf '\02'`
sed "s/^\([^0-9]*\)/\1$SEP/" junk | sort -t "$SEP" -k 2n,2 | tr -d "$SEP" 

相关内容