Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 仅按一个键对文件排序_Bash_Sorting - Fatal编程技术网

Bash 仅按一个键对文件排序

Bash 仅按一个键对文件排序,bash,sorting,Bash,Sorting,我有一个很大的日志文件,由许多来源的输入组成,每一行都以主机名作为前缀。日志是跨多台主机并行执行的操作的输出,因此日志有些混乱 我想做的是按照主机名而不是其他方式对日志进行排序,以便每个服务器的事件仍然按自然顺序显示。下面的排序文档似乎暗示-k1,1应该完成这一点,但仍然会导致行被完全排序 -k, --key=POS1[,POS2] start a key at POS1 (origin 1), end it at POS2 (default end of line)

我有一个很大的日志文件,由许多来源的输入组成,每一行都以主机名作为前缀。日志是跨多台主机并行执行的操作的输出,因此日志有些混乱

我想做的是按照主机名而不是其他方式对日志进行排序,以便每个服务器的事件仍然按自然顺序显示。下面的排序文档似乎暗示
-k1,1
应该完成这一点,但仍然会导致行被完全排序

   -k, --key=POS1[,POS2]
          start a key at POS1 (origin 1), end it at POS2 (default end of line)
我制作了一个简单的测试文件:

1 grape
1 banana
2 orange
3 lemon
1 apple
预期产出将是:

1 grape
1 banana
1 apple
2 orange
3 lemon
但观察到的结果是:

$ sort -k1,1 sort_test.txt
1 apple
1 banana
1 grape
2 orange
3 lemon

sort-s-k 1,1 sort_test.txt


-s禁用“最后手段”排序,即对不属于指定键的所有内容进行排序。

这可能是可以在几行
awk
中完成的事情;也许你可以试着在那里挖点头脑?所以你试图显示。或者…实际上,在我等待的时候,我做了一个粗略的单行线,用awk添加行号,按两个键排序,然后把行号去掉。但是
-s
更好。谢谢D