テーブルから一部のデータを操作して抽出する方法は?

テーブルから一部のデータを操作して抽出する方法は?

私は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

おすすめ記事