從大文本文件中提取行

從大文本文件中提取行

我有一個文字文件,其中的數據如下所示(準確地說是 1875 行)

chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924    10660933    0.818294903 +   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417    12327426    0.584010382 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 
chr1    MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433    12327442    0.825226087 -   .   TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504 

我正在尋找一種解決方案來提取末尾附近有“+”的行。 (它發生在最後一個之後;。同樣,我希望提取-股線並放入單獨的文件中。

編輯:資料集更改,之前查看了錯誤的檔案。

答案1

從評論中,我了解到您正在尋找提取第七列為+or的行-。輸入檔案以製表符分隔。為此,在將+行儲存到名為 的檔案中plus並將減號行儲存到名為 的檔案時minus,最自然的工具可能是awk

awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file

怎麼運作的:

  • -F'\t'

    awk一次讀入一筆記錄(行)並將其分成欄位。在這裡,我們將字段分隔符號設定為製表符。

  • $7=="+"{print >"plus"}

    如果第 7 個欄位是 a +,則將該行儲存到檔案中plus

  • $7=="-"{print>"minus"}

    同樣,如果第 7 個欄位是 a -,則將該行儲存在檔案 中minus

答案2

sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile

對於第七個製表符分隔部分,執行下列操作:

sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
            /^-/{g;w minus.file' -e 'b
         }; /^+/{g;w plus.file'  -e \}

但您可能必須使用文字<tab>字元來取代\t上面的轉義字元。

相關內容