两个列表之间的艰难 grep

两个列表之间的艰难 grep

我有两个不同的txt文件。第一个名为“all_E3.txt”包含一个对象列表(在列中),并且在该列表中还有很多重复的对象。在另一个名为“UPS.txt”的文件中,列中有一个对象列表(无重复),每个对象都关联一个变量(同一行另一列,它是一个数字或“NA”)。

在此文件中,文件“all_E3.txt”中还存在(但不仅限于)对象。我想获得另一个名为“output_UPS.txt”的文件,其中包含“ALL_E3.txt”中存在的所有对象以及根据“UPS.txt”对应的变量。例如:

  • 文件“all_E3.txt”:
    AMFR
    AMFR
    AMFR
    ANAPC11
    CRB
    CRB
    TER
    CAM
    DVDE
    
  • 文件 2“UPS.txt”
    AMFR 0
    REF 1
    SDRF N.A.
    BHU 3 
    ANAPC11 2
    CRB 2
    YUT 1
    TER 0
    CAM 3
    WERS N.A.
    DVDE 3
    
  • 文件输出“output_UPS.txt”
    AMFR 0
    AMFR 0
    AMFR 0
    ANAPC11 2
    CRB 2
    CRB 2
    TER 0
    CAM 3
    DVDE 3
    

在使用不同组织的文件的类似设置中,我在朋友的建议下尝试了以下操作:

for name in ????_?
do
   for file in $name/Pocket_???_$name\.pdb_OUTPUT.txt
   do
      grep -H Exposed $file | uniq
   done
done 

但是我无法根据我当前的情况进行调整。操作系统是CentOS 7。

请问有人可以帮助我吗?谢谢。

答案1

只要awk是 的有效替代方案grep,以下内容就应该有效:

awk 'NR==FNR{a[$1]=$2} NR>FNR{print $1,a[$1]}' UPS.txt all_E3.txt > output_UPS.txt
  • 这将首先读取并创建第一列和第二列之间的UPS.txt映射。a
  • 当处理到达下一个文件时all_E3.txt(由 表示NR,全局行计数器与FNR每个文件行计数器不同),它将输出该文件的“第一列”以及之前创建的映射中的关联值。第二栏。

输出将被重定向到output_UPS.txt.

相关内容