我有一个很长的未排序日志来自许多来源,它的每一行都有它写入的时间。 我想按时间排序日志,问题是没有约定在哪里写时间在行,所以我没有任何模式基于分隔符或我可以过滤的行中的位置。 我唯一知道的是时间格式:hh:mm:ss。 例如:
文件名时间
时间
文件名日期时间
文件名例外日期时间
...
我如何使用这种格式对文件进行排序 - 即使我不知道该行的确切位置? 我需要能够按小时,分钟和秒钟疼痛
答案 0 :(得分:2)
您可以使用sed
提取时间(格式为 hh:mm:ss ),将其添加到行首,然后使用此新字段进行排序,然后用切割再次将其移除,如:
sed 's/\(.*\)\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\)/\2\t\1\2/' data|
sort -t: -k3,3|cut -f2-
(这将按秒排序,将其更改为-k2,2或-k1,1以按分钟或小时排序)