我的问题的简化版本是我需要一个 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
使用GNUjoin
和bash
:sort
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
,而不仅仅是在=
;之前。这可能不适用于您的真实数据。