2017-04-20 55 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 
相關問題