我有一个输入日志表单:
system 2018-02-05 04:15:49 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:52 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:53 :: aaaaaaaaaaaaa
system 2018-02-05 04:20:06 :: ccccccccccccc
system 2018-02-05 04:21:10 :: bbbbbbbbbbbbb
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:23:49 :: bbbbbbbbbbbbb
system 2018-02-05 04:23:49 :: ccccccccccccc
并希望用空行分隔每个时间 block 。 上述输入的预期输出为:
system 2018-02-05 04:15:49 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:52 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:53 :: aaaaaaaaaaaaa
system 2018-02-05 04:20:06 :: ccccccccccccc
system 2018-02-05 04:21:10 :: bbbbbbbbbbbbb
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:21:10 :: ccccccccccccc
system 2018-02-05 04:23:49 :: bbbbbbbbbbbbb
system 2018-02-05 04:23:49 :: ccccccccccccc
最佳答案
想法是形成每一行都是唯一的键,在你的例子中它是 $2
和 $3
(即在 Awk 的上下文中,第二个和第三个空格分隔的列)。
我们通过这个组合构建一个唯一的键($2 $3
),如果这个组合与后续行不同,我们在解析行时打印一个新行字符(也由特殊变量 ORS
或仅由 print ""
表示)在 Awk 中)。下面的代码反射(reflect)了这一点
$ awk '($2 $3)!=p && NR>1 {print ""} {print; p=($2 $3)}' file
system 2018-02-05 04:15:49 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
system 2018-02-05 04:15:51 :: aaaaaaaaaaaaa
...
关于bash - 在每个时间 block 之间添加空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617875/