cat file | wc | cat > file2
normalmente seriam dois usos inúteis de cat
, pois isso é funcionalmente equivalente a:
< file wc > file2
No entanto, pode haver um caso para:
cat file | wc -c
mais de
< file wc -c
Isso é para desativar a otimização que muitas implementações de wc
fazem para arquivos regulares.
Para arquivos regulares, o número de bytes no arquivo pode ser obtido sem ter que ler todo o conteúdo do arquivo, mas apenas fazendo uma chamada stat()
do sistema e recuperando o tamanho como armazenado no inode. / p>
Agora, pode-se querer que o arquivo seja lido, por exemplo, porque:
-
as informações de
stat()
não são confiáveis (como para alguns arquivos em/proc
ou/sys
no Linux):$ < /sys/class/net/lo/mtu wc -c 4096 $ cat /sys/class/net/lo/mtu | wc -c 6
- se deseja verificar a quantidade de dados que podem ser lidos (como no caso de um disco rígido com falha).
- um só quer obter pontos de referência sobre a rapidez com que os dados podem ser lidos.
- se deseja que o conteúdo do arquivo seja armazenado em cache na memória.
Claro, essas são exceções. No caso geral, você prefere usar < file wc -c
por motivos de desempenho.
Agora, você pode imaginar cenários ainda mais improvisados onde se pode querer usar: cat file | wc | cat > file2
:
- talvez
wc
tenha um perfil apparmor ou outro mecanismo de segurança que proíba a leitura ou gravação em arquivos enquanto é permitido porcat
(isso seria inédito) - talvez
cat
seja capaz de lidar com arquivos grandes (como em > 2 32 bytes), mas nãowc
nesse sistema (coisas assim foram necessárias para alguns comandos em alguns sistemas no passado). - talvez alguém queira que
wc
(e o primeirocat
) seja executado e leia o arquivo inteiro (e seja eliminado no último minuto), mesmo quefile2
não possa ser aberto para gravação. - talvez alguém queira ocultar a falha (status de saída) de abrir ou ler o conteúdo de
file
. Emborawc < file > file2 || :
faria mais sentido. - talvez alguém queira ocultar (da saída de
lsof
(list open files)) o fato de que ele está recebendo uma contagem de palavras defile
ou que ele está armazenando uma contagem de palavras emfile2
.