使用 bash 和 wc -l 对其中包含整数的行进行计数
Count lines with integers in them using bash and wc -l
我的 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...
我会这样做 program | grep -E "^[0-9]+" | wc -l
。这将匹配以一位或多位数字开头的行。对于您的用例来说似乎足够了。
program | grep '^[0-9].*$' | wc -l
您可以在指定正则表达式后使用grep来识别整数。
对于这种特殊情况,
grep -E "^[0-9]+" | wc -l
应该可以。
这里,
^表示行首
[0-9]表示0到9之间的任意数字
+表示一个或多个这样的数字
你不需要 wc,grep 有 -c
program | grep -c -E -x '[[:digit:]]+'
-c
仅打印所选行的计数
-E
扩展正则表达式(您可以省略它并使用模式 [0-9]\+
)
-x
匹配整行而不是部分
或者,由于您还提到了 [DEBUG]
,您可以使用 awk
进行一次传递(特别是如果您的 program
不是 idempotent)
program | awk '/^[0-9]+$/ { numbers++ } /^\[DEBUG\]/ {debugs++} END { print numbers,debugs }'
我的 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...
我会这样做 program | grep -E "^[0-9]+" | wc -l
。这将匹配以一位或多位数字开头的行。对于您的用例来说似乎足够了。
program | grep '^[0-9].*$' | wc -l
您可以在指定正则表达式后使用grep来识别整数。
对于这种特殊情况,
grep -E "^[0-9]+" | wc -l
应该可以。
这里,
^表示行首
[0-9]表示0到9之间的任意数字
+表示一个或多个这样的数字
你不需要 wc,grep 有 -c
program | grep -c -E -x '[[:digit:]]+'
-c
仅打印所选行的计数-E
扩展正则表达式(您可以省略它并使用模式[0-9]\+
)-x
匹配整行而不是部分
或者,由于您还提到了 [DEBUG]
,您可以使用 awk
进行一次传递(特别是如果您的 program
不是 idempotent)
program | awk '/^[0-9]+$/ { numbers++ } /^\[DEBUG\]/ {debugs++} END { print numbers,debugs }'