根据输入列表从特定列中循环提取信息

根据输入列表从特定列中循环提取信息

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

也可以看看:

相关内容