我想比较两个文件
文件 1:
evm.TU.PTPU-T1. PF00808
evm.TU.PTP-T1 PF00498
evm.TU.PTPX-T1 PF00250
evm.TU.PAN-T1 PF00817
文件 2:
PF00808 CL0012 Histone CBFD_NFYB_HMF Histone-like transcription factor
PF00498 CL0357 SMAD-FHA FHA FHA domain
PF00817 CL0123 HTH Forkhead Forkhead domain
输出:
evm.TU.PTPU-T1 PF00808 CL0012 Histone CBFD_NFYB_HMF Histone-like
evm.TU.PTP-T1 PF00498 CL0357 SMAD-FHA FHA FHA domain
evm.TU.PAN-T1 PF00817 CL0123 HTH Forkhead Forkhead domain
我尝试了下面的命令
awk 'FNR==NR{a[$1]=$2;next} ($1 in a){print $0,a[$1]}' file2 file1 >file3
但它只打印文件 2 的第二列,而不是整行。
PF00808 evm.TU.PTPU-T1 CL0012
请告诉我如何将文件 2 的整个匹配行添加到输出中,而不仅仅是第二列
答案1
您有以下几种选择:
$0
将的整行保存File2
到以其 为键的数组中;然后根据其 中的键$1
查找:$1
File1
$2
$ awk 'NR==FNR{a[$1]=$0; next} ($2 in a){print $1,a[$2]}' File2 File1 evm.TU.PTPU-T1. PF00808 CL0012 Histone CBFD_NFYB_HMF Histone-like transcription factor evm.TU.PTP-T1 PF00498 CL0357 SMAD-FHA FHA FHA domain evm.TU.PAN-T1 PF00817 CL0123 HTH Forkhead Forkhead domain
保存其上的
$1
键值,然后根据其上的键查找相应的整行File1
$2
File2
$1
$ awk 'NR==FNR{a[$2]=$1} ($1 in a){print a[$1], $0}' File1 File2 evm.TU.PTPU-T1. PF00808 CL0012 Histone CBFD_NFYB_HMF Histone-like transcription factor evm.TU.PTP-T1 PF00498 CL0357 SMAD-FHA FHA FHA domain evm.TU.PAN-T1 PF00817 CL0123 HTH Forkhead Forkhead domain