2016-05-10 50 views
0

我需要複製整行使用linux命令行模式的文本。複製完整的文本行,然後是特定模式

我有一個文本文件,誰是這樣的:

查詢= LCL | TRINITY_DN38349_c2_g130_i1 LEN = 264路徑= [13442:0-77 13443:78-113 13444:114-116 13445:117 -137 13446:138-141 13447:142-181 13448:182-182 13449:183-190 13450:191-220 13451:221-237 13452:238-263] [-1,13442,13443, 13445,13446,13447,13448,13449,13450,13451 ,13452,-2]

長度= 612個 序列產生顯著比對:

ref | XP_011662878.1 |預計:在惡性腦腫瘤中被刪除... 71.2 8e-11 ref | XP_011660819.1 |預測:半乳糖凝集素3結合蛋白樣[... 61.2 1e-08 ref | XP_011662496.1 |預計: 在惡性腦腫瘤中刪除... 60.5 2e-07

/ref | XP_011662878.1 |預言:在惡性腦瘤1個蛋白樣[紫色球海膽]長度=已刪除903

我需要複製整個線,其與Query= lcl|TRINITY/ref|啓動。問題是我有幾十個像這樣的文件,每個文件都有數百個文本行,所以跟隨這些模式的數字和文本不斷變化。我希望將它們重定向到一個文件中。

理想的輸出應該是這樣的:

查詢= LCL | TRINITY_DN38349_c2_g130_i1

/裁判| XP_011662878.1 |預言:在惡性腦瘤刪除1個蛋白樣[紫色球海膽]

注意,感興趣的線總是與/refQuery=啓動。我已閱讀了一些關於使用sed的帖子,但我無法使其工作。

在此先感謝。

+0

在您所需的輸出中,「Query = lcl | TRINITY_DN38349_c2_g130_i1」不是整行。你想輸出什麼? – SLePort

回答

0

使用find和sed,得到截斷線路作爲自己所需的輸出樣本中(從當前目錄遞歸搜索):

find . -type f -exec sed -n 's/^\(Query= lcl|TRINITY[^ ]*\) .*/\1/p;s/^\(\/ref.*\) .*/\1/p' '{}' \; > output 

要保存整行開始Query= lcl|TRINITY/ref

find . -type f -exec sed -n '/^Query= lcl|TRINITY/p;/^\/ref.*/p' '{}' \; > output 

匹配行保存爲output文件。

相關問題