我有一个大数据文件(data.txt
)和一个模式文件(patt.dat
),数据如下所示
data.txt
[bottle]:[some description 1]
[pen]:[some description 2]
[mobile]:[some description 3]
[pen_pencil]:[some description 4]
[mouse]:[some description 5]
patt.dat
pen
mobile
我这样给予
grep -F -f patt.dat data.txt
然后我得到以下
[pen]:[some description 2]
[mobile]:[some description 3]
[pen_pencil]:[some description 4]
但我只想要,
[pen]:[some description 2]
[mobile]:[some description 3]
请帮助解决任何问题 我不想硬编码任何东西,因为会有很多这样的模式,硬编码都不会好看。
如果可以通过任何其他方式实现相同的目的,请同时提出建议。
答案 0 :(得分:4)
使用-w进行单词匹配,例如:
grep -wf patt.dat data.txt
Output:
[pen]:[some description 2]
[mobile]:[some description 3]
答案 1 :(得分:1)
sed 's/.*/^\[&]/' patt.dat > /tmp/patt_grep.dat
egrep -F -f /tmp/patt_grep.dat data.txt
需要更改一下patt.dat内容以允许另一个有效的工具工作。我使用egrep来允许^
但是可以使用(f)grep来改变格式[word]:[
而不是
答案 2 :(得分:1)
以下是awk
awk -F"[][]" 'FNR==NR {a[$1];next} $2 in a' patt.dat data.txt
[pen]:[some description 2]
[mobile]:[some description 3]
如果您想测试更多参数,awk
可能是最简单的解决方案
它将模式存储在数组a
中,然后测试是否在数组2
中找到了字段a
,如果找到,则打印该行。