为什么我在 grepping 文件 (.gz) 时字数(即 -wc)上有很多零

  • 本文关键字:-wc grepping 文件 gz linux bash grep
  • 更新时间 :
  • 英文 :


我在计算字符串时得到很多零。我需要为多个文件执行此操作。我也在尝试在 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文件的命令。尝试改用gzcatzcat

(是的,有一些方法可以使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,则可能需要恢复到循环。

最新更新