私はLinuxに初めて触れました。次のデータがありますが、tbl形式です。
>Feature gnl|XXX|IFEJKLFI_79
locus_tag IFEJKLFI_05549
locus_tag IFEJKLFI_05549
protein_id gnl|XXX|IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88
locus_tag IFEJKLFI_05553
locus_tag IFEJKLFI_05553
protein_id gnl|XXX|IFEJKLFI_05553
locus_tag名を抽出して機能名と一致させたい。詳しくは、出力は次のようになります。
Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
awkコマンドを直接使用できますか、それとも最初にデータを操作する必要がありますか?では、データを抽出する方法は?
ありがとうございます! !
答え1
各データチャンクの間に空白行がある場合は、入力例に示すようにawkを使用してください。
$ awk -v RS= '{print $1, $2, $4}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
または、例の入力と同様に、locus_tag線が常に形状線に沿っている場合:
$ awk '/^>/{feat=$0; n=0} ++n==2{print feat, $2}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553
またはこれ:
$ awk '/^>/{feat=$0; f=1} f && $1=="locus_tag"{print feat, $2; f=0}' file
>Feature gnl|XXX|IFEJKLFI_79 IFEJKLFI_05549
>Feature gnl|XXX|IFEJKLFI_88 IFEJKLFI_05553