awk-比较两个文件并打印两个文件的所有列

awk-比较两个文件并打印两个文件的所有列

我想比较两个文件

文件 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

您有以下几种选择:

  1. $0将的整行保存File2到以其 为键的数组中;然后根据其 中的键$1查找:$1File1$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
    
  2. 保存其上的$1键值,然后根据其上的键查找相应的整行File1$2File2$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
    

相关内容