我有一个输出文件,它是通过将数千个日志文件重新映射,然后根据“guest”帐户的成功登录对它们进行排序和消除重复(sort,uniq)而创建的。
我试图找出一种方法来根据日期对条目进行排序,同时还要将上面的4行和下面的1行放在一起(都在条目的分隔符“-+-+-”之间)。例如:
-+-+-
Windows帐户“DATASERVER\guest”的会话线程387746,来自116.111.145.182:51007:
登录方法为“password”的用户名“guest”的登录尝试1成功。
00005168433 2015-07-04 02:24:19.324083 UTC WinSSHD 5.23[060]信息
-+-+-
来自168.1.107.236:61972的Windows帐户“DATASERVER\guest”的会话线程417661:
登录方法为“password”的用户名“guest”的登录尝试1成功。
00005566540 2015-09-28 12:29:31.424072 UTC WinSSHD 5.23[060]信息
-+-+-
Windows帐户“DATASERVER\guest”的会话线程9807,来自36.80.132.130:49683:
登录方法为“password”的用户名“guest”的登录尝试1成功。
000037599714 2014-12-04 18:39:15.26972 UTC WinSSHD 5.23[060]信息
-+-+-
Windows帐户“DATASERVER\guest”的会话线程1697,来自119.147.251.150:48215:
登录方法为“password”的用户名“guest”的登录尝试1成功。
000000230681 2013-11-21 11:23:52.165653 UTC WinSSHD 5.23[049]信息
-+-+-
是否可以根据YYYY-DD-MM HH:MM:SS.micro对它们进行排序,同时将每个条目的所有6行作为一个整体放在一起并重新排序整个文件?谢谢。

最佳答案

感谢上周回答这个问题的人(现在的答复似乎已删除)。
在讨论完你的答案之后,这里有一个可行的解决方案(好吧,对我来说已经足够接近了,因为我并不真正关心日志项HH:MM:DD部分之后的微秒数)。

grep -Po ".*(?=UTC)" Filename.txt | sort -k 2,2 | xargs -I {} grep -B4 -A1 '{}' Filename.txt

07-28 01:31
查看更多