在 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。对于不区分大小写的比较,请将键折叠为小写等。

当读取第二个文件 时Lookup.txt,测试第二个字段的小写值是否是关联数组中的键。如果是,则打印整行。

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

变量NRFNR分别保存总体读取的行数和从当前文件读取的行数。如果这些变量的值相同,我们将从第一个文件中读取。

相关内容