0
我有文件看起來像這樣AWK - 打印特定模式
gene_id_100100 sp|Q53IZ1|ASDP_PSESP 35.81 148 90 2 13 158 6 150 6e-27 109 158 531
gene_id_100600 sp|Q49W80|Y1834_STAS1 31.31 99 63 2 1 95 279 376 7e-07 50.1 113 402
gene_id_100 sp|A7TSV7|PAN1_VANPO 36.36 44 24 1 41 80 879 922 1.9 32.3 154 1492
gene_id_10100 sp|P37348|YECE_ECOLI 32.77 177 104 6 3 172 2 170 2e-13 71.2 248 272
gene_id_101100 sp|B0U4U5|SURE_XYLFM 29.11 79 41 3 70 148 143 206 0.14 35.8 175 262
gene_id_101600 sp|Q5AWD4|BGLM_EMENI 35.90 39 25 0 21 59 506 544 4.9 30.4 129 772
gene_id_102100 sp|P20374|COX1_APILI 38.89 36 22 0 3 38 353 388 0.54 32.0 92 521
gene_id_102600 sp|Q46127|SYW_CLOLO 79.12 91 19 0 1 91 1 91 5e-44 150 92 341
gene_id_103100 sp|Q9UJX6|ANC2_HUMAN 53.57 28 13 0 11 38 608 635 2.1 28.9 42 822
gene_id_103600 sp|C1DA02|SYL_LARHH 35.59 59 30 2 88 138 382 440 4.6 30.8 140 866
gene_id_104100 sp|B8DHP2|PROB_LISMH 25.88 85 50 2 37 110 27 109 0.81 32.3 127 276
gene_id_105100 sp|A1ALU1|RL3_PELPD 31.88 69 42 2 14 77 42 110 2.2 31.6 166 209
gene_id_105600 sp|P59696|T200_SALTY 64.00 125 45 0 5 129 3 127 9e-58 182 129 152
gene_id_10600 sp|G3XDA3|CTPH_PSEAE 28.38 74 48 1 4 77 364 432 0.56 31.6 81 568
gene_id_106100 sp|P94369|YXLA_BACSU 35.00 100 56 3 25 120 270 364 4e-08 53.9 120 457
gene_id_106600 sp|P34706|SDC3_CAEEL 60.00 20 8 0 18 37 1027 1046 2.3 32.7 191 2150
現在,我需要提取基因ID,這是||之間的一個在第二列。換句話說,我需要的輸出,看起來像這樣:
Q53IZ1
Q49W80
A7TSV7
P37348
B0U4U5
Q5AWD4
P20374
Q46127
Q9UJX6
C1DA02
B8DHP2
A1ALU1
P59696
G3XDA3
P94369
P34706
我一直在嘗試使用下面的命令來做到這一點:
awk '{for(i=1;i<=NF;++i){ if($i==/[A-Z][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]/){print $i} } }'
,但它似乎並沒有工作。
哇,完美的工作!而且它看起來也很簡單,不像我試圖用哈哈的那段代碼。非常感謝您的幫助,當限制關閉時,我會在9分鐘內接受您的答案。你是一個拯救生命的人。 – MPR6 2015-01-26 22:03:37
雖然如果你有時間,你能告訴我爲什麼我使用的命令不起作用嗎? – MPR6 2015-01-26 22:06:00
嗯,從哪裏開始。那麼,首先,就awk而言,'|'之間的東西不是一個字段,因爲它的缺省字段分隔符是一個空白序列。第一行的'$ 2'是代碼中的'sp | Q53IZ1 | ASDP_PSESP'。其次,你使用比較運算符'=='而不是正則表達式匹配運算符'〜',這與正則表達式沒有太大關係。我不認爲它的作用是定義的; gawk似乎在做數值轉換(?)。如果您使用過'〜',那麼您將打印出包含匹配的字段,而不是匹配本身。 – Wintermute 2015-01-26 22:17:11