我想要在一个非常大的文件中找到数万个(固定的)模式。我想计算每种模式的总命中数。我在grep文档中找不到任何暗示这是可能的。我的设置看起来像这样:
gunzip -c bigfile.txt.gz | grep -c -f patterns.txt
当然,这会计算与patterns.txt
中任何相匹配的行,而我想要的是每个模式的单独点击次数。在grep的命令行上是否可以这样?或者我必须写一个程序吗?
答案 0 :(得分:0)
我不知道同时为所有模式执行此操作,但您可以编写一个bash脚本,一次读取一个并执行grep | wc -l为每一个。
答案 1 :(得分:0)
如此:
gunzip -c bigfile.txt.gz | grep -f patterns.txt | sort | uniq -c
排序可能有点大,因为它会节省整个输出。带有哈希的快速perl / python / ...脚本可以大大降低它。
$ grep -f pats.txt a.txt | ./t.rb
a 3
b 3
c 2
这是避免排序的脚本,看看它是否真的加快了速度。
#!/usr/bin/env ruby
results = {}
while gets
line = $_.chomp
results[line] ||= 0
results[line]+= 1
end
results.each { |k,v| puts ""#{k} #{v}"}