【发布时间】:2016-03-25 16:06:41
【问题描述】:
我正在尝试根据第一个第三列的数字,然后是第一列的最后一个字符,对具有第三列的文本文件进行排序。这是一个例子:
AB2 S 12
ABRT6 E 23
A3 S 2
ABC5 E 34
ABRT4 S 23
预期的输出应该是:
A3 S 2
AB2 S 12
ABRT4 S 23
ABRT6 E 23
ABC5 E 34
我查看了相关问题,但所有问题都假设第一列中数字部分的长度具有固定索引,或者第一列中的字符和数字之间存在已知的分隔符。现在我正在尝试以下命令,但是当第三列相同时,它无法根据第一列进行排序。有什么建议吗?
sort -k3,3n -k1,1
【问题讨论】:
-
使用
awk添加另一列,其中包含第一列的最后一个字符。将其通过管道传输到sort,然后通过管道传输到cut以删除多余的列。 -
除非只有我,否则你的样本数据没有说服力;您的
sort -k3,3n -k1,1生成所需的输出。如果您添加了一个条目ABBT9 X 23,那么ABBT9条目将排在ABRT4之前,但是您真的希望它出现在之后,因为尾随数字9 出现在尾随数字4 之后。正确吗?如果是这样,我认为“仅排序”将无济于事,因为它没有类似于可以使用的“负列偏移”的概念:-k1.-1,1.-1。可以添加这样的符号——但你必须这样做。