パイプで区切られたファイルがあります。
検索.txt:
Column1|yellow|value|628291
Column9|red|value|346801
ファイル.txt:
Yellow
YellowDiamond
Redgold
私が得ようとしている価値黄色File.txtに存在し、パイプで区切られたファイル(Lookup.txtなど)と正確に一致します。出力は以下のように完全なラインでなければなりません。 File.txtファイルには、Lookup.txtファイルから取得する値があります。
awk
、コマンドを試しましたが、fgrep
予想される結果は次のとおりです。
Column1|yellow|value|628291
答え1
grep
あなたのアプローチがうまくいかないのはなぜですか?
grep -Fwif File.txt Lookup.txt
有望に見えますね…?
答え2
文字列File.txt
を連想配列のキーとして保存しますawk
。大文字と小文字を区別せずに比較するには、キーを小文字に縮小します。
2番目のファイルを読み取るときは、Lookup.txt
2番目のフィールドの小文字の値が連想配列のキーであることをテストしてください。その場合は、行全体を印刷します。
awk -F '|' 'NR == FNR { key[tolower($0)]; next } (tolower($2) in key)' File.txt Lookup.txt
変数NR
とはFNR
、読み取った行の総数と現在のファイルから読み取った行の数をそれぞれ保持します。この変数の値が等しい場合は、最初のファイルから読み込みます。