计算文件中 nul 分隔项目的数量

计算文件中 nul 分隔项目的数量

我有一个 shell 脚本,用于find -print0将要处理的文件列表保存到临时文件中。作为日志记录的一部分,我想输出找到的文件数量,因此我需要一种方法来获取该数量。如果该-print0选项没有被用于安全起见,我可以用来wc -l获取计数。

答案1

一些选项:

tr -cd '\0' | wc -c

tr '\n\0' '\0\n' | wc -l       # Generic approach for processing NUL-terminated
                               # records with line-based utilities (that support
                               # NUL characters in their lines like GNU ones).

grep -cz '^'                   # GNU grep

sed -nz '$='                   # recent GNU sed, no output for empty input

awk -v RS='\0' 'END{print NR}' # not all awk implementations

请注意,对于在最后一个 NUL 字符之后包含数据的输入(或没有 NUL 字符的非空输入),这些tr方法将始终计算 NUL 字符的数量,但awk//sed方法grep将为这些额外字节计算额外的记录。

答案2

我能想到的最好的方法是使用grep -zc '.*'.这是可行的,但是使用 grep 和匹配任何内容的模式感觉是错误的。

答案3

perl

perl -0ne 'END {print $.}'

或者:

perl -nle 'print scalar split "\0"'

或者:

perl -nle 'print scalar unpack "(Z*)*", $_'

相关内容