回答:
いくつかのオプション:
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とtailbashで、ヌルで区切られた入力に?