Answers:
一些选项:
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 -vRS='\0' 'END{print NR}' # not all awk implementations
请注意,对于包含最后一个NUL字符之后的数据的输入(或没有NUL字符的非空输入),tr
方法将始终计算NUL字符的数量,但是awk
/ sed
/ grep
方法将为这些额外字节计算一条额外记录。
head -c 5G /dev/urandom > f
)上进行了测量。结果: grep 1.7s(相同grep -Fcz ''
)•tr + wc-c 7.7s•tr + wc-l 7.4s•sed 34.7s•awk 1m11.7s
awk
,您需要将语言环境设置为C
(或任何不使用多字节字符的语言环境),LC_ALL=C awk ... < f
LC_ALL=C
在sort
无法加快速度的地方使用过,因此幸运的是我仍然有以前的文件:LC_ALL=C awk ...
需要6.7秒。
与perl
:
perl -0ne 'END {print $.}'
要么:
perl -nle 'print scalar split "\0"'
要么:
perl -nle 'print scalar unpack "(Z*)*", $_'
wc -l
)记为便笺(可能需要)。
head
以及tail
以空分隔符输入?