Linux加入2行,然后根据分隔符

时间:2015-12-30 11:12:23

标签: linux bash awk sed

我一直在尝试编写一个可以在文本文件中合并2行然后输入一个有分隔符的新行的命令时遇到了一些麻烦。我已经彻底研究了这个,我唯一能找到的东西是每隔一行合并然后添加一个分隔符。这不是我需要的,因为我已经在文件中有一个分隔符,用于分隔我需要合并的每两行。 该文件当前包含以下内容(为了获得这些结果,我使用顶部的命令):

grep -C 2 "some text" somefile.log | grep -A1 "somepattern" | cut -d ' ' -f -1,2,3,4 | cut -c 1-19,118,150-163,130-132 ^C

这是文件:

2015-12-29 08:55:43 sg-somepattern
2015-12-29 08:55:43 N22
--
2015-12-29 08:56:59 sg-somepattern
2015-12-29 08:56:59 N22
--
2015-12-29 08:58:07 sg-somepattern
2015-12-29 08:58:07 N22
--
2015-12-29 09:19:32 sg-somepattern
2015-12-29 09:19:32 N22
--
2015-12-29 22:05:57 sg-somepattern
2015-12-29 22:05:57 N22

现在我需要的结果应该是这样的:

2015-12-29 08:58:07 sg-somepattern 2015-12-29 08:58:07 N22
2015-12-29 09:19:32 sg-somepattern 2015-12-29 09:19:32 N22
2015-12-29 22:05:57 sg-somepattern 2015-12-29 22:05:57 N22

使用sed 'N;s/\n/ /'之后没有工作,只是在每行的第二行中加入了分隔线。

有没有办法通过内置命令实现这一目标?我不熟悉awk,所以我很难自己写这个。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我会使用awk

$ awk -v RS="--" -F"\n" 'NF>=3{print $(NF-2), $(NF-1)}' file
2015-12-29 08:55:43 sg-somepattern 2015-12-29 08:55:43 N22
2015-12-29 08:56:59 sg-somepattern 2015-12-29 08:56:59 N22
2015-12-29 08:58:07 sg-somepattern 2015-12-29 08:58:07 N22
2015-12-29 09:19:32 sg-somepattern 2015-12-29 09:19:32 N22
2015-12-29 22:05:57 sg-somepattern 2015-12-29 22:05:57 N22

这会将分隔符--设置为记录分隔符。这样,每条记录都是一个块。然后,打印我们想要的特定行是一个问题。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/^--/d;N;s/\n/ /' file

删除分隔符并连接左边的每一行。