入力リストに基づいて特定の列から情報を抽出するループ

入力リストに基づいて特定の列から情報を抽出するループ

ファイル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

また見なさい:

関連情報