Contagem de caracteres no comando Unix wc

6

Quando dou o comando wc em um arquivo com o conteúdo abaixo, ele fornece o número de caracteres como 30. Inclui o caractere de fim de arquivo? Desde que incluímos o espaço e a nova linha, há apenas 29 caracteres.

Hello World
Again Hello World

A saída é

2  5 30 test
    
por user3539 28.02.2013 / 03:24

2 respostas

8

Não há caracteres de fim de arquivo nos sistemas de arquivos Unix ou Linux. A chamada do sistema read() retorna 0 na condição de final de arquivo, se o descritor de arquivo em uso se referir a um arquivo regular. read() funciona de maneira diferente em soquetes e tubulações. Você não recebe um caractere especial para marcar o final do arquivo.

wc deu 30 caracteres como contagem de caracteres ou bytes porque a primeira linha tem 12 caracteres contando o fim da linha (alimentação de linha ASCII, 0x0a numericamente), e a segunda linha tem 18, também contando a nova linha alimentação de linha).

Você pode verificar novamente a contagem de caracteres nesse caso com ls -l e, se tiver hexdump ou xxd , poderá obter uma impressão hexadecimal mostrando as novas linhas de valor com valor 0x0a.

A função de biblioteca padrão C fgetc() retorna -1 no final do arquivo, mas isso é feito no código da biblioteca, não pelo Unix (ou Linux) ou pela chamada do sistema read() .

    
por 28.02.2013 / 03:34
1

É o número de bytes no arquivo. Veja a man page.

Aqui está um exemplo com 5 bytes:

$ echo 1234 > foo.txt
$ od -ta foo.txt
0000000   1   2   3   4  nl
0000005
$ ls -l foo.txt
-rw-r--r-- 1 tim None 5 Feb 27 21:26 foo.txt
$ wc foo.txt
1 1 5 foo.txt

Agora adicione uma linha em branco:

$ echo >> foo.txt
$ ls -l foo.txt
-rw-r--r-- 1 tim None 6 Feb 27 21:29 foo.txt
$ wc foo.txt
2 1 6 foo.txt
    
por 28.02.2013 / 03:30