Linuxでパイプで区切られたファイルからプレーンテキストファイルに値を取得する

Linuxでパイプで区切られたファイルからプレーンテキストファイルに値を取得する

パイプで区切られたファイルがあります。

検索.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.txt2番目のフィールドの小文字の値が連想配列のキーであることをテストしてください。その場合は、行全体を印刷します。

awk -F '|' 'NR == FNR { key[tolower($0)]; next } (tolower($2) in key)' File.txt Lookup.txt

変数NRとはFNR、読み取った行の総数と現在のファイルから読み取った行の数をそれぞれ保持します。この変数の値が等しい場合は、最初のファイルから読み込みます。

関連情報