我有一个这样的文件垃圾:
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"