Unix 仅使用某些列进行排序
我有一个以600MB制表符分隔的文件,需要仅使用前两列对其进行排序。这些列已按顺序排列的任何行应保持现有顺序。我使用Unix 仅使用某些列进行排序,unix,sorting,Unix,Sorting,我有一个以600MB制表符分隔的文件,需要仅使用前两列对其进行排序。这些列已按顺序排列的任何行应保持现有顺序。我使用sort和--key的努力似乎一直在按其他列对行进行排序 这是未排序文件的一个示例: 1244072768 7234 Z 1244072768 7234 e 1244072768 7234 b 1244072768 7234 r 1244072768 7234 a 1244072768 7341 C 1244072768 7341
sort
和--key
的努力似乎一直在按其他列对行进行排序
这是未排序文件的一个示例:
1244072768 7234 Z
1244072768 7234 e
1244072768 7234 b
1244072768 7234 r
1244072768 7234 a
1244072768 7341 C
1244072768 7341 a
1244072768 7234 -
1244072768 7341 r
1244072768 7341 t
1244072768 7341 -
1244072769 4237 W
1244072769 4237 a
1244072769 4237 s
1244072769 4237 h
1244072769 4237 -
1244072768 7234 Z
1244072768 7234 e
12440727687234 b
1244072768 7234 r
1244072768 7234 a
12440727687341 C
1244072768 7341 a
1244072768 7234 -
1244072768 7341 r
12440727687341吨
1244072768 7341 -
12440727694237 W
12440727694237A
12440727694237 s
12440727694237小时
1244072769 4237 -
结果应该是:
1244072768 7234 Z
1244072768 7234 e
1244072768 7234 b
1244072768 7234 r
1244072768 7234 a
1244072768 7234 -
1244072768 7341 C
1244072768 7341 a
1244072768 7341 r
1244072768 7341 t
1244072768 7341 -
1244072769 4237 W
1244072769 4237 a
1244072769 4237 s
1244072769 4237 h
1244072769 4237 -
1244072768 7234 Z
1244072768 7234 e
12440727687234 b
1244072768 7234 r
1244072768 7234 a
1244072768 7234 -
12440727687341 C
1244072768 7341 a
1244072768 7341 r
12440727687341吨
1244072768 7341 -
12440727694237 W
12440727694237A
12440727694237 s
12440727694237小时
1244072769 4237 -
我尝试了
sort-k1n-k2n test.log
,sort-k1-k2 test.log
和排序-k1,2test.log
并按整行对它们进行排序。是否有任何方法可以使用标准linux/unix命令行工具仅按前两列对该文件进行排序?您应该添加-s
以获得:
从手册页:
-s, --stable
stabilize sort by disabling last-resort comparison
-s、 --稳定的
通过禁用最后的比较来稳定排序
为了解释文件为何处于这种复杂的模式,我有几个进程都在向文件写入多行消息。因此,有时两个进程会重叠并混合其消息。第一列是Unix时间戳,第二列是进程ID。我需要将同一进程在同一秒内编写的所有消息分组在一起,并且最后的“-”行始终是最后一行。谢谢,这正是我所需要的,我发现的示例从未包含该标志 -s, --stable stabilize sort by disabling last-resort comparison