使用bash和wc -l计算其中包含整数的行

时间:2020-02-15 18:18:11

标签: bash shell grep wc

Linux计算机上的实用程序将日志输出到“ stdout”。 在每一行中,都有一个字符串或一个整数,如下所示:

[ERROR] resource busy, retrying
0989282882
[DEBUG] starting process with pid 4028
7918361566
1037491392
[DEBUG] starting process with pid 4056
2873187983
7853738301
1290312037
[DEBUG] done with init
1872989829
[DEBUG] cleaning up
8917982882

(实际上要更长一些)

我想计算其中包含整数的行。

我已经使用:program | grep DEBUG | wc -l来获取调试计数(与ERROR相同)

但是我如何计算整数?他们没有像字符串一样的静态东西,我可以grep ...

4 个答案:

答案 0 :(得分:3)

您可以在指定正则表达式后使用grep标识整数。

对于这种特殊情况, grep -E "^[0-9]+" | wc -l 应该可以。

在这里

^表示行的开头

[0-9]表示0到9之间的任何数字

+表示一个或多个这样的数字

答案 1 :(得分:1)

您不需要wc,grep具有-c

program |  grep -c -E -x '[[:digit:]]+'
  • -c仅打印选定行的数量
  • -E扩展的正则表达式(您可以忽略它并使用模式[0-9]\+
  • -x匹配整行而不只是其中的一部分

请参见POSIX grep manual

或者,因为您也提到了[DEBUG],所以您可以使用awk进行一次通过(尤其是如果您的program不是idempotent的话)

program | awk  '/^[0-9]+$/ { numbers++ } /^\[DEBUG\]/ {debugs++} END { print numbers,debugs }'

请参见POSIX awk manual

答案 2 :(得分:0)

我会program | grep -E "^[0-9]+" | wc -l这样做。这将匹配以1个或多个数字开头的行。似乎足够适合您的用例。

答案 3 :(得分:0)

program | grep '^[0-9].*$' | wc -l