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


13

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

范例:

输入文件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

Answers:


22

使用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 -k1,1 -k2V将进行排序A 1-10A 1-2因为10数字大于2


¹从技术上讲,-k2是指该行的一部分,从第二个字段开始(在第一次从非空白过渡到空白之后),直到该行的结尾,但带有n标志,相当于-k2,2n仅前导部分认为构成一个数字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.