我可以用含有模式"基因"以及接下来的2个连续行,使用文本文件中的以下shell命令。
grep -A 2 ' gene' file
输出:
gene 1..1515
/locus_tag="MSMEI_RS00005"
/old_locus_tag="MSMEI_0001"
gene 2109..3302
/locus_tag="MSMEI_RS00010"
/old_locus_tag="MSMEI_0003"
现在我的目标是使用像
这样的标签打印连续的行gene 1..1515 /locus_tag="MSMEI_RS00005" /old_locus_tag="MSMEI_0003"
gene 2109..3302 /locus_tag="MSMEI_RS00010" /old_locus_tag="MSMEI_0003"
如何在shell中使用相同的grep命令执行此操作?
答案 0 :(得分:2)
您不需要grep
,Awk
可以使用其getline()
函数执行此操作以获取接下来的两行,
awk 'BEGIN{OFS="\t"}/gene/{getline n1; getline n2; print $0, n1,n2}' file
(或)如果您对前导空格感到困扰,请使用gsub()
函数删除它们,
awk 'BEGIN{OFS="\t"}/gene/{gsub(/^[[:space:]]+/,"",$0); getline n1; getline n2; print $0, n1,n2}' file
答案 1 :(得分:2)
使用sed:
sed -nEe '/^ gene/{N;N;s/\n */\t/g;p}' file
/ gene/
适用于匹配该模式的行,然后我们读取两个N
分机符号,s
取代换行符,并跟随带标签的空格,然后p
rint。