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/procou/sysno 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
wctenha 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
catseja capaz de lidar com arquivos grandes (como em > 2 32 bytes), mas nãowcnesse 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 quefile2nã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 defileou que ele está armazenando uma contagem de palavras emfile2.