从一个文件中获取键值对以获取另一个文件中的键列表

从一个文件中获取键值对以获取另一个文件中的键列表

我的问题的简化版本是我需要一个 bash 脚本来检索键值对,file2其中的键在file1.

例如:

file1(包含钥匙)

a
d
f

file2(包含键值巴黎)

a=1
b=2
c=3
d=4
f=5
g=6

预期输出:

a=1
d=4
f=5

我尝试过的:

cat file1 | xargs -I % grep "^%=" file2

这种方法效果很好,但当文件很大时,性能会很差。 (例如file1有12k行,file2有20k行)

最好的方法是什么?

答案1

你可以尝试 awk:

$ awk 'NR==FNR{keys[$1]; next} $1 in keys' file1 FS='=' file2
a=1
d=4
f=5

答案2

使用GNUjoinbashsort

join -t '=' <(sort file1) <(sort file2)

输出:

a=1
d=4
f=5

答案3

这几乎就是这样grep -f做的目的:

$ grep -f file1 file2
a=1
d=4
f=5

file1不过,这会从行中的任何位置搜索键file2,而不仅仅是在=;之前。这可能不适用于您的真实数据。

相关内容