Awk
刪除以每列模式結尾的字元串
我想刪除文件中隨機出現的 (L=6), (L=7)…..(L=12) 的所有條目,格式如下;
我的輸入文件:
TRINITY_DN1910_c0_g1_i13 GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5) GO:0006030(L=9) GO:0006032(L=11) GO:0006040(L=6) TRINITY_DN1452_c0_g1_i11 GO:0005975(L=3) GO:0006022(L=9) GO:0006026(L=12) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)
該文件是製表符分隔的。
預期產出
TRINITY_DN1910_c0_g1_i13 GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5) TRINITY_DN1452_c0_g1_i11 GO:0005975(L=3) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)
您可以使用
sed
以下方法執行此操作:sed 's/GO:[^ ]*(L=[6-9])//g s/GO:[^ ]*(L=1[0-2])//g' filename
您可以按 輸入製表符
<ctrl-v><tab>
。這就是我在以 . 開頭的方括號中的內容^
。
在每個 Unix 機器上的任何 shell 中使用任何 awk:
$ awk ' BEGIN { for (i=6; i<=12; i++) { re = re sep i sep = "|" } re = "\t[^\t]+[(]L=(" re ")[)]" } { gsub(re,"") print } ' file TRINITY_DN1910_c0_g1_i13 GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5) TRINITY_DN1452_c0_g1_i11 GO:0005975(L=3) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)
如果您有任何其他連續的數字範圍要處理,只需更改循環中的開始/結束數字。如果您在其中設置
re
了不連續的數字,BEGIN
但是對於這些數字是有意義的,例如,一個選項可能是將循環替換為re = "7|12|957|1045"
.