2016-11-27 5 views
2

私は20000プローブのリストを持っていますが、sed/awkを使用して各プローブの最初の3行/Sed/Awkを使用して、最初の3つの固有のインスタンスを抽出します

Example of dataset: 
    Probe1 A GTTAGAGGAGGTGGAAGAGC 
    Probe1 B CTGAGGTCGGGACGGAGCAC 
    Probe1 C GATGTAGGCGGTTGGCGTGG 
    Probe1 D GTTGGCGAAGTCACATCTAG 
    Probe1 E CATGTCGCCGACTCCGTCGA 
    Probe1 F GTGATGTTCTGAGTACATAG 

    Probe3 A GATTGTAGGTTTCCTGCCAG 
    Probe3 L ACCCAGCCAGGGGAAAACCA 
    Probe3 Z GGAGATGTAGGCGGTTGGCG 
    Probe3 Y GGAGATGTAGGCCTTAAAAA 
    Probe3 D GATTGTAGGGGTCCTGCCAG 

所望の出力:

Probe1 A GTTAGAGGAGGTGGAAGAGC 
Probe1 B CTGAGGTCGGGACGGAGCAC 
Probe1 C GATGTAGGCGGTTGGCGTGG 
Probe3 A GATTGTAGGTTTCCTGCCAG 
Probe3 L ACCCAGCCAGGGGAAAACCA 
Probe3 Z GGAGATGTAGGCGGTTGGCG 

答えて

5

awkを救出します!空行

$ awk '++a[$1]<4 && NF' file 
+2

だから、シンプルかつエレガントな働いた、ありがとうございます。ありがとうございました。ただ一つのこと:あなたは++の部分を説明してもらえますか? – Bio21

+0

ニース。 '++ a [$ 1]'は最初のフィールドの一意の値に関連する値を増加させます。 4未満のときはラインが印刷されます。 – dawg

0

(あなたは、Pythonを使用したい場合)、ここでのsedやawkのを使用する必要はありません。私はあなたの質問を誤解していない限り、これはそれを行う必要があります。

probes = [ 
"""Probe1 A GTTAGAGGAGGTGGAAGAGC 
Probe1 B CTGAGGTCGGGACGGAGCAC 
Probe1 C GATGTAGGCGGTTGGCGTGG 
Probe1 D GTTGGCGAAGTCACATCTAG 
Probe1 E CATGTCGCCGACTCCGTCGA 
Probe1 F GTGATGTTCTGAGTACATAG""", 
"""Probe3 A GATTGTAGGTTTCCTGCCAG 
Probe3 L ACCCAGCCAGGGGAAAACCA 
Probe3 Z GGAGATGTAGGCGGTTGGCG 
Probe3 Y GGAGATGTAGGCCTTAAAAA 
Probe3 D GATTGTAGGGGTCCTGCCAG"""] 

for probe in probes: 
    for i, line in enumerate(probe.split("\n")): 
     print(line) 
     if i >= 2: 
      break 
+0

を削除する

$ awk '++a[$1]<4' file 

は、両方のオプションが完全 – Bio21

関連する問題