对于以下示例数据,两列都是数字,但第二列的位数不同。
2 9
1 1000
1 50
3 0
Run Code Online (Sandbox Code Playgroud)
我想根据两列进行排序。用数字标志分别指定它们-n,产生我想要的结果。
sort -n -k1,1 -k2,2 num.data.txt
Run Code Online (Sandbox Code Playgroud)
给
1 50
1 1000
2 9
3 0
Run Code Online (Sandbox Code Playgroud)
这就是我想要的。
然而,
sort -n -k1,2 num.data.txt
Run Code Online (Sandbox Code Playgroud)
给出似乎按字母顺序排序的数据:
1 1000
1 50
2 9
3 0
Run Code Online (Sandbox Code Playgroud)
我知道这sort -n -k1,2 num.data.txt与sort -n num.data.txt只有两列时(给出相同结果)相同,但我实际使用的数据有更多列。
为什么这两种方法之间存在这种差异?
甲-k1,2密钥规范指定一个密钥,在所述第一列的开始开始(包括前导空白作为默认列分隔是从非空白到空白转变)在第二柱的端部并结束。
重要的是要意识到它只是一把钥匙。如果您需要两个键,则需要两个-k选项。排序时,sort将"1 50"字符串与"1 1000"数字进行比较。对于数字比较,通过考虑看起来像有效数字的前导部分(忽略前导空格)将这些字符串转换为数字。所以我们将比较1和1。由于它们相等,sort将恢复回退排序以确定关系,这是整行的词汇比较。
与-n -k1,1 -k2,2,sort比较"1","1"然后因为它是平局,考虑第二个键 ( " 50"vs " 1000")。由于它是数字排序,-n -k1 -k2因此也可以工作(其中-k1指定从第一个字段开始并在行尾结束的键,与整行相同)。