按第一列和第二列对文件进行排序

按第一列和第二列对文件进行排序

如何通过按第二列的第一个元素排序(仅当第一列元素相同时)来操作两列制表符分隔的文本文件?

示例:

输入文件1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

预期输出:文件 2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

答案1

使用sort-k选项一次按(多个)列排序:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1首先按第一列排序,然后-k2n在第一列连接时按第二列进行排序,这样您就可以按照所需的顺序获得输出:仅当第一列元素相同时,才按第二列的第一个元素排序。

当按数字排序时,它只会检查该字段,直到它不再是数字,这样您就可以只比较它的第一个元素。

当两个键比较相同时,然后sort按词法比较整行,作为最后的比较。例如,在A 1-10vs中A 1-2,第一个键是相同的(A字符串),第二个键也是相同的(两者都被视为数字1),因此在词法上sort比较A 1-10vs A 1-2,后者在2排序之后更大1。 GNU 实现sort有一个-V选项或V键标志来执行版本sort,这类似于词法比较,只不过字符串中的十进制数字序列是按数字进行比较的,因此sort -k1,1 -k2VA 1-10在后面排序A 1-2,因为10数字大于2


1 从技术上讲,-k2是指从第二个字段开始(第一次从非空白到空白的转换之后)到行尾结束的部分,但带有标志n,相当于-k2,2n仅作为前导部分考虑构成一个数字。

相关内容