![两个列表之间的艰难 grep](https://linux22.com/image/173106/%E4%B8%A4%E4%B8%AA%E5%88%97%E8%A1%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E8%89%B0%E9%9A%BE%20grep.png)
我有两个不同的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
.