Eu tenho um arquivo de texto de 2958616 bytes. Quando executo sort < file.txt | uniq > sorted-file.txt
, recebo um arquivo de texto de 3213965 bytes. Por que meu arquivo de texto classificado é maior?
Você pode baixar os arquivos de texto aqui .
text-processing
wb9688
fonte
fonte
\r\n
finais de linha, enquanto o arquivo de entrada possui\n
finais de linha. Talvez você deva definir seu código de idioma de maneira diferente. TenteLC_ALL=C
na frente de cada comando.locale
? Tem certeza de que não criou o arquivo em outro sistema?sed '/^[a-z]*$/d' < file.txt | wc -l
me deu 305 linhas.â ê î ñ ô ö öö û
aqueles que não estão no conjunto ASCII.Respostas:
Enquanto seu arquivo original possui linhas que terminam com
\n
, seu arquivo classificado possui\r\n
. A adição do\r
é o que muda o tamanho.Para ilustrar, eis o que acontece quando executo seu comando no meu sistema Linux:
Como você pode ver, o arquivo desduplicado classificado é algumas linhas mais curto e, consequentemente, alguns bytes menor. Seu arquivo, no entanto, é diferente:
Os dois arquivos têm exatamente o mesmo número de linhas, mas:
O
sorted-file.txt
que baixei do seu link é maior. Se agora examinarmos a primeira linha, podemos ver o extra\r
:Que não estão presentes no que eu criei no Linux:
Se agora removermos o
\r
arquivo do seu arquivo:Obtemos o resultado esperado, um arquivo menor que o original, exatamente como o que eu criei no meu sistema:
fonte
\r\n
line endings are a Windows thing.hexdump
revela isso!Seu arquivo classificado é maior porque usa finais de linha do Windows
\r\n
(dois bytes) em vez de finais de linha do Linux\n
(um byte).Será que você estava executando esse comando acima no Windows usando ferramentas como
cygwin
este novo subsistema Linux para Windows 10? Ou você rodou alguma coisa no Wine?fonte