Linux连接两行,然后根据分隔符输入新行



我在编写一个命令时遇到了一些问题,该命令可以合并文本文件中的两行,然后在有分隔符的地方输入新行。我已经对此进行了彻底的研究,我唯一能找到的就是合并每一行,然后添加一个分隔符。这不是我所需要的,因为我在文件中已经有了一个分隔符,可以分隔我需要合并的每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,所以我很难独自写这篇文章。如有任何帮助,我们将不胜感激。

我会使用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

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

这可能对你有用(GNU sed):

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

删除分隔符并连接剩下的每一行。

最新更新