我有一个文件,我想将匹配的模式复制到包含匹配模式的行下面的两行。模式不固定。例如
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是模式匹配。非常感谢任何帮助
答案 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)并重新排列行以适合所需的格式。