ファイルの列から個々の情報を抽出する

ファイルの列から個々の情報を抽出する

次の形式のタブ区切りフィールドを含むファイルがあります。

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=;

おすすめ記事