这就是我正在做的事情
sort -k 1,2 -g temp2
我正在
hs1 154800000 247249719 3
hs1 27800000 120700000 4
hs1 27800000 124300000 4
hs3 32100000 71800000 9
hs3 32100000 87200000 2
hs3 54400000 74200000 15
hs4 76500000 155100000 20
hs4 76500000 182600000 3
hs4 76500000 88200000 77
hs4 88200000 124000000 2
hs5 58900000 180857866 8
hs5 58900000 76400000 2
hs5 58900000 97300000 4
hs5 76400000 143100000 14
hs5 97300000 147200000 6
hs6 63500000 70000000 73
hs6 63500000 92100000 4
hs6 7000000 29900000 2
hs6 70000000 113900000 70
hs6 70000000 139100000 57
hs6 92100000 113900000 3
但我希望第二个字段中的较大数字低于较小的数字
例如,我希望前三行是
hs1 27800000 120700000 4
hs1 27800000 124300000 4
hs1 154800000 247249719 3
而不是
hs1 154800000 247249719 3
hs1 27800000 120700000 4
hs1 27800000 124300000 4
答案 0 :(得分:2)
-k 1,2
并不意味着使用两个键(字段1和2)进行排序。它意味着使用由字段1和2的内容组成的单个键进行排序。使用数字排序时,这根本不起作用。事实上,你可以看到使用--debug
正在做什么决定像hs1 154800000
这样的值根本不是有效数字(因为它们不是),并且忽略你提供的密钥。您所看到的是“后备排序”的结果,它在整行上进行了字母排序,以打破具有相同键值的行之间的联系。
其中一项工作是什么:
sort -k 1,1 -k 2,2g temp2
sort -k 1,1.2 -k 1.3,1g -k 2,2g temp2
通过使用多个-k
选项,我们可以获得多个排序键。
在第一种情况下,-k 1,1
按字母顺序排序第一个字段,-k 2,2g
按数字排序第二个字段。
在第二种情况下,-k 1,1.2
按字母顺序按第一个字段的前两个字符排序; -k 1.3,1g
按第一个字段的其余部分进行数字排序,-k 2,2g
按第二个字段进行数字排序。
两个选项为您的样本输入生成相同的输出,因为前两个字符始终为hs
且没有多位数字,但正确的选择取决于您在其他情况下要发生的事情。
答案 1 :(得分:1)
-k选项是一个字段范围。使用其中两个,并在需要的地方包含常规数字选项:
% sort -k1,1 -k2,2g temp2
hs1 27800000 120700000 4
hs1 27800000 124300000 4
hs1 154800000 247249719 3
hs3 32100000 71800000 9
hs3 32100000 87200000 2
hs3 54400000 74200000 15
hs4 76500000 155100000 20
hs4 76500000 182600000 3
hs4 76500000 88200000 77
hs4 88200000 124000000 2
hs5 58900000 180857866 8
hs5 58900000 76400000 2
hs5 58900000 97300000 4
hs5 76400000 143100000 14
hs5 97300000 147200000 6
hs6 7000000 29900000 2
hs6 63500000 70000000 73
hs6 63500000 92100000 4
hs6 70000000 113900000 70
hs6 70000000 139100000 57
hs6 92100000 113900000 3