我有一个管道分隔文件
查找.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
。对于不区分大小写的比较,请将键折叠为小写等。
当读取第二个文件 时Lookup.txt
,测试第二个字段的小写值是否是关联数组中的键。如果是,则打印整行。
awk -F '|' 'NR == FNR { key[tolower($0)]; next } (tolower($2) in key)' File.txt Lookup.txt
变量NR
和FNR
分别保存总体读取的行数和从当前文件读取的行数。如果这些变量的值相同,我们将从第一个文件中读取。