Linux
根據輸入列表從特定列中提取循環中的資訊
我有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
也可以看看: