提取与字符串awk sed python perl匹配的所有列

时间:2013-01-15 12:39:10

标签: linux sed

我的数据看起来像这样

SNP     NA18524 NA18526 NA18529 NA18537 
Status  Low     Low  High    High    
Pop     ASN     ASN     CEU       YRI 
ENSG00000187634 6.425880        6.348570        6.464480        6.391740 

我想匹配并打印那些我找到字符串ASN的列

我稍后想要匹配并仅打印CEU,然后只打印YRI

我想要像

这样的东西
 sed 'p/[ASN]//g'

因此输出如下:

SNP     NA18524 NA18526 
Status  Low     Low      
Pop     ASN     ASN     
ENSG00000187634 6.425880        6.348570

数据以制表符分隔。

2 个答案:

答案 0 :(得分:1)

在Python中执行此操作可能是您在标题中提到的几种语言中最不用说的。它应该是直截了当的:只需读取行(for line in open('myfile.tsv'):),标记化(fields = line.split('\t')),匹配搜索字符串,跟踪“喜欢”哪些列,然后再次完成整个事情,打印您现在知道的所需字段。

如果您对实施感到困惑,您可能希望将其作为单独的,更具体的问题发布。

答案 1 :(得分:1)

ZERO ELEGANCE ......但它应该有效

awk -F'\t' ' { 
   if (found!=1) { 
       for(i=0;i<=NF;++i) { 
           if ($i=="ASN") { 
               # save which columns contains it
               idx[i] = 1; 
               found=1; 
           } 
       } 

       # at least one column found?
       if (found==1) { 
           # this 3 instructions will rewind the file
           ARGC++; 
           ARGV[ARGIND+1] = FILENAME; 
           nextfile; 
       } 
   } 
   else { 
       # printout the rows matching
       for (a in idx) 
           printf("%s ",$a); 
       printf("\n"); 
   } 
} ' yourfile