使用awk / sed编辑文本文件

时间:2014-10-10 05:29:00

标签: awk sed

我有一个文件,我想将匹配的模式复制到包含匹配模式的行下面的两行。模式不固定。例如

  1.  m_cg 
  2.  do0
  3.  do1
  4.  a_cg  
  5.  do2
  6.  do3

我希望输出为

  1.m_cg
  2.m_cg do0
  3.m_cg do1
  4.a_cg
  5.a_cg do2
  6.a_cg do3

。* _ cg是模式匹配。非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

这个awk单行应该这样做:

awk '/_cg$/{p=$0;print;next}{print p,$0}' file

以你的例子:

kent$  cat f
m_cg
do0
do1
a_cg
do2
do3

kent$  awk '/_cg$/{p=$0;print;next}{print p,$0}' f
m_cg
m_cg do0
m_cg do1
a_cg
a_cg do2
a_cg do3

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r 's/\s//g;/_cg/{h;b};G;s/\.(.*)\n.*(\..*)$/\2 \1/' file

删除所有空格。在遇到包含_cg的行时,将其复制到保留空间(HS),然后将其打印出来。对于所有其他行,请附加复制的行(HS)并重新排列行以适合所需的格式。