Eu tenho um script de shell que usa find -print0
para salvar uma lista de arquivos a serem processados em um arquivo temporário. Como parte do registro, gostaria de gerar o número de arquivos encontrados e, portanto, preciso de uma maneira de obter essa contagem. Se a -print0
opção não estivesse sendo usada por segurança, eu poderia usar wc -l
para obter a contagem.
shell-script
qqx
fonte
fonte
head
etail
na entrada delimitada por nulo no bash?Respostas:
Algumas opções:
Observe que, para uma entrada que contenha dados após o último caractere NUL (ou entrada não vazia sem caracteres NUL), as
tr
abordagens sempre contarão o número de caracteres NUL, mas as abordagensawk
/sed
/grep
contarão um registro extra para esses bytes extras .fonte
head -c 5G /dev/urandom > f
). Resultados: grep 1.7s (igual paragrep -Fcz ''
) • tr + wc-c 7.7s • tr + wc-l 7.4s • sed 34.7s • awk 1m11.7sawk
, você desejará definir o código do idioma paraC
(ou qualquer um que não use caracteres multibyte),LC_ALL=C awk ... < f
LC_ALL=C
emsort
onde não fez acelerar as coisas, portanto Felizmente eu ainda tenho o arquivo de antes:LC_ALL=C awk ...
leva 6.7s.O melhor método em que consegui pensar é usar
grep -zc '.*'
. Isso funciona, mas parece errado usar grep com um padrão que corresponda a qualquer coisa.fonte
Com
perl
:ou:
ou:
fonte
wc -l
) como uma nota (como pode ser desejado).