你如何grep文件并使用选项卡获得接下来的2行?

时间:2017-04-20 10:43:24

标签: shell file text grep

我可以用含有模式"基因"以及接下来的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命令执行此操作?

2 个答案:

答案 0 :(得分:2)

您不需要grepAwk可以使用其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。