我对 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