ファイルAとファイルBがあります。
fileAには、fileBの2番目の列から抽出したい名前のリストが格納されています。
ファイル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
不要な参照を削除すると、2番目の試みは「動作」します。
for i in $(cat fileA); do awk -v i="$i" '$2==i' fileB; done # but don't do this
ただし、シェルループを使用することにした場合は、以下を使用することをお勧めしますwhile
。
while IFS= read -r i; do awk -v i="$i" '$2==i' fileB; done < fileA # don't do this either
より良いアプローチは、シェルループを完全に避けることです。
awk 'NR==FNR{a[$1]; next} $2 in a' fileA fileB
また見なさい: