2017-04-20 58 views
1

我可以从文本文件中使用以下shell命令来grep包含模式“基因”和下两个连续行的行。你怎么grep一个文件,并获得下一个选项卡的两行?

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"     

我怎么做这与外壳相同的grep命令?

+0

什么是您的操作系统? –

+0

使用Ubuntu – user1427429

+0

如果内容中有4列没有列内容空间,如示例中所示,请尝试将输出管道输出到'xargs -n4 |列-t“ – Sundeep

回答

2

随着SED:

sed -nEe '/^  gene/{N;N;s/\n */\t/g;p}' file 

/ gene/在匹配该模式的行上工作,然后我们读取两个N分机行,s ubstitute换行符和空格,然后选择制表符,然后p rint。

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 
相关问题