我在计算字符串时得到很多零。我需要为多个文件执行此操作。我也在尝试在 shell 脚本中执行此操作。但我不介意使用文件名输出计数量的命令。
这目前有效,但对于 90 个文件来说太手动了:
less filename.log.2014-11-01.gz | grep -wc "burgers for 1 dollar"
count: 5678
使用上面的命令它可以工作。但是当我尝试多次将其添加到我的 shell 脚本并运行脚本时,它会返回零?这不可能是正确的:
#!/bin/bash
less filename.log.2014-11-01.gz | grep -wc "burgers for 1 dollar"
less filename.log.2014-11-02.gz | grep -wc "burgers for 1 dollar"
less filename.log.2014-11-03.gz | grep -wc "burgers for 1 dollar"
less filename.log.2014-11-04.gz | grep -wc "burgers for 1 dollar"
输出:
0
0
0
0
0
less
是一个交互式查看器,而不是用于提取gziped文件的命令。尝试改用gzcat
或zcat
。
(是的,有一些方法可以使less
幕后gzcat
运行,但这取决于并非始终可用的配置,正如您清楚地注意到的那样。
此外,您的代码将从简单的循环中受益匪浅。
for log in filename.log.2014-11-0[1234].gz; do
printf '%s:' "$log"
gzcat "$log" | grep -wc 'burgers for 1 dollar'
done
我将文件名添加到每个输出行以提高可用性。但是,当然,在这种特殊情况下,您希望
gzgrep -wc 'burgers for 1 dollar' filename.log.2014-11-0[1234].gz
但是,某些旧版本的 gzgrep
在公开底层 grep
命令的全部功能方面做得并不完美,因此如果您只有旧版本的 gzgrep
,则可能需要恢复到循环。