按数字顺序对制表符分隔文件中的行进行排序

时间:2019-05-21 13:05:07

标签: linux bash sorting

我正在尝试对以下格式的文件进行排序

ch1 1 209
ch1 23 890
ch3 45 21
ch4 66 12
ch10 12 90
ch10 11 53

我正在使用命令

sort -t $"\t" -nk1 filename

但是结果是ch1排在ch10之后

ch10 12 90
ch10 11 53
ch1 1 209
ch1 23 890
ch3 45 21
ch4 66 12

但是我希望数值在1之前排在10之前。那么有人可以建议需要做什么吗? 预期结果:

ch1 1 209
ch1 23 890
ch3 45 21
ch4 66 12
ch10 12 90
ch10 11 53

1 个答案:

答案 0 :(得分:1)

KEYDEF 的字段中指定数字开头的字符索引。在这种情况下,我们要对第一个字段的数字部分(从第三个字符开始)进行排序,因此-k1.3n

$ sort -k1.3n file
ch1     1       209
ch1     23      890
ch3     45      21
ch4     66      12
ch10    11      53
ch10    12      90