Linux

根據輸入列表從特定列中提取循環中的資訊

  • November 4, 2020

我有fileA和fileB。

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

任何幫助將非常感激。

如果您刪除無關的引用,您的第二次嘗試將“起作用”:

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

也可以看看:

引用自:https://unix.stackexchange.com/questions/618005