【发布时间】:2017-02-03 09:52:25
【问题描述】:
我正在尝试在 linux 中格式化以下文本文件。您能否建议实现我的输出的最佳方法。
输入文字
Header| Header Identifier
[2017-02-03 14:23:44,066] - Message 1
[2017-02-03 14:23:45,066] - Message 1
[2017-02-03 14:23:46,066] - Message 1
[2017-02-03 14:23:47,066] - Message 1
Trailer | Trailer Identifer
Header| Header Identifier
[2017-02-03 14:23:44,066] - Message 2
[2017-02-03 14:23:45,066] - Message 2
[2017-02-03 14:23:46,066] - Message 2
[2017-02-03 14:23:47,066] - Message 2
Trailer | Trailer Identifer
我正在尝试生成的输出
Header| Header Identifier
[2017-02-03 14:23:44,066] - Message 1
Trailer | Trailer Identifer
Header| Header Identifier
[2017-02-03 14:23:44,066] - Message 2
Trailer | Trailer Identifer
提前致谢!
更新:我不想在这里删除重复项,我想保留时间戳最低的记录并删除其他记录。
【问题讨论】:
-
awk '!a[$0]++' file之类的东西应该可以工作(您必须使用字段分隔符)。这个问题对于 bash 来说很常见,但我找不到确切的重复项 -
@Aserre:再看一遍,这看起来不像您发布的那个的副本。 OP 想要重新排序输入文件以显示输出。我假设,输出将重新格式化多行
-
@Inian 是的,我没有注意到 OP 输入中的时间戳并不完全相同。此外,如果消息 1 和消息 2 不是唯一的,则必须根据
Header/Trailer块来处理日志消息。 -
@Abhishek Narayan:输入总是按照您输入的顺序排列,还是不需要?
-
@Inian 没错,消息行不是重复的,它有不同的时间戳。