使用“sort”合并和排序多个文件

New*_*biZ 11 linux sorting

我有一堆以下格式的文本日志文件:

ID          (17 characters)
Timestamp   (14 characters YYYYmmddHHMMSS e.g. "20060210100040" -> 2006/02/10 10:00:40)
Random data (? characters)
end of line
Run Code Online (Sandbox Code Playgroud)

文件已按时间戳排序。我需要从多个日志文件中获取包含所有日志的 1 个日志文件,按时间戳排序。请注意,日志文件真的很大,每个大约 3-4G(并且有几十个)我尝试了以下命令:

sort -s -m -t '|' -k1n,1n +17 -o data_sort.txt *.TXT
Run Code Online (Sandbox Code Playgroud)

这是我最终得到这个命令的方式:

-s     : don't bother with tie results
-m     : merge all logs files
-t '|' : there is no | in my logs, so the whole line should be field 1
-k1n,1n: sort on the first field as a numeric value
+17    : the timestamp starts at index 17
-o     : output file
Run Code Online (Sandbox Code Playgroud)

实际上……它失败得很惨。输出文件 data_sort.txt 只是所有文件的串联,根本没有排序:(

如果有人能就这个问题提供任何帮助,我将不胜感激!

谢谢

Fel*_*rez 11

man sort 读到:

-m, --merge 合并已经排序的文件;不排序

“+”符号没有出现在我的手册页中进行排序。所以我不知道你是怎么得到+17的。如果你想使用的整条生产线,你就不会需要-t或者-k,因为默认是开始从开始行,结束行的排序。


Den*_*son 6

您的密钥应该是-k1.17n并省略-t+17

ID和时间戳之间是否有空格?然后时间戳是字段 2,密钥应该是-k2.