次の形式のタブ区切りフィールドを含むファイルがあります。
2-micron 251 1523 R0010W . + SGD gene . ID=R0010W;Name=R0010W;gene=FLP1;Alias=FLP1;Ontology_term=GO:0003690,GO:0003697,GO:0005575,GO:0008301,GO:0009009,GO:0042150;Note=Site-specific%20recombinase%20encoded%20on%20the%202-micron%20plasmid%2C%20required%20for%202-micron%20plasmid%20propagation%20as%20part%20of%20a%20plasmid%20amplification%20system%20that%20compensates%20for%20any%20copy%20number%20decreases%20caused%20by%20missegregation%20events;dbxref=SGD:S000029654;orf_classification=Verified 0
2つの列(4番目と最後の列)を抽出する必要がありました。ただし、より詳細な情報を含む列から特定の情報を抽出する必要があります。たとえば、gene=foo
列10から抽出する必要があります。
したがって、結果として、4列10列と最後の列の合計3列の遺伝子情報が欲しい。どうすればいいですか?
答え1
これがPerl方式です:
$ perl -lane '$F[9]=~s/.*(gene=.+?;).*/$1/; print "$F[3]\t$F[9]\t$F[$#F]"' file
R0010W gene=FLP1; 0
スペースの自動フィールド分割を有効にして、-a
フィールドを配列に保存します@F
。これはスペースとタブで機能します。各呼び出しに改行文字を追加し、与えられ-l
たスクリプトを適用して入力ファイルを1行ずつ読みます。print()
-n
-e
スクリプトは、最初のフィールドまでの10番目のフィールド(配列は0から始まるため、10番目のフィールドは$F[9]
)のすべての内容を削除します。次に、4番目、最後、残りの10番目を印刷します。gene=
;