我有文件A和文件B。
fileA 正在存储我想从 fileB 的第二列中提取的名称列表。
文件A:
QW123
BH876
PR009
文件B:
MJ194 PR009 100
PR009 IJ940 78
JG948 BH448 58
期望输出:
MJ194 PR009 100
JG948 BH448 58
我正在使用下面的命令尝试它,但没有一个起作用。想知道代码之间遗漏了什么。
for i in $(cat fileA); do awk '$2=="$i"' fileB; done
for i in $(cat fileA); do awk -v 'i="$i"' '$2=="i"' fileB; done
任何帮助将非常感激。
答案1
如果您删除无关的引用,您的第二次尝试将“有效”:
for i in $(cat fileA); do awk -v i="$i" '$2==i' fileB; done # but don't do this
但是,如果您决定使用 shell 循环,那么最好使用while
:
while IFS= read -r i; do awk -v i="$i" '$2==i' fileB; done < fileA # don't do this either
更好的办法是完全避免 shell 循环:
awk 'NR==FNR{a[$1]; next} $2 in a' fileA fileB
也可以看看: