-1

このようなデータがあります

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

?

データはタブ区切りです。

4

2 に答える 2

1

ゼロエレガンス...しかしそれはうまくいくはずです

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
于 2013-01-15T13:13:54.723 に答える
1

Python でこれを行うことは、タイトルで言及したいくつかの言語の中でおそらく最も頭を悩ませることでしょう。それは簡単です: 行を読み ( for line in open('myfile.tsv'):)、トークン化 ( fields = line.split('\t')) し、検索文字列を照合し、「好きな」列を追跡し、もう一度すべてを実行して、必要であることがわかっているフィールドを出力します。

実装に行き詰まった場合は、別のより具体的な質問として投稿することをお勧めします。

于 2013-01-15T12:49:53.980 に答える