AWK - 打印特定图案

时间:2015-01-26 21:56:30

标签: regex awk pattern-matching

我的文件看起来像这样

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,它是||之间的基因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} } }'

但它似乎不起作用。

1 个答案:

答案 0 :(得分:2)

模式匹配不是必需的。我建议

awk -F\| '{print $2}' filename

这会将行拆分为| - 分隔的字段并打印其中的第二个字段。

可替换地,

cut -d\| -f 2 filename

实现了同样的目标。