encontra o comprimento da linha mais longa em todos os arquivos de texto em um diretório

14

Eu sei como obter o comprimento da linha mais longa em um arquivo de texto com awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

mas como posso obter o comprimento da maior linha de todos os arquivos em um diretório?

    
por trupty 18.08.2014 / 16:53

4 respostas

11

A solução mais simples é concatenar todos os arquivos e canalizar o resultado para o seu script:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

Você também pode passar diretamente vários arquivos para o awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

Naturalmente, pode haver alguns avisos se os arquivos forem de fato diretórios, mas devem ser inofensivos. Você pode ter problemas maiores com arquivos binários porque eles não têm um conceito de linha . Então, para ser mais específico, você pode fazer algo como

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

para corresponder apenas aos arquivos .txt no diretório atual.

E, como @ G-Man declarou em seu comentário, * não corresponderá a arquivos ocultos (começando com um ponto). Se você quiser, use * .* .

    
por 18.08.2014 / 16:58
4

Com o GNU wc :

cat *.txt|wc -L

-L imprime o comprimento da linha mais longa.

    
por 29.08.2014 / 11:12
4

Se você quer o tamanho máximo por arquivo, com o GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

Ou o tamanho máximo em todos os arquivos:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

Isso pressupõe que os arquivos terminem em caracteres de nova linha. Se um arquivo não terminar em um caractere de nova linha, sua última linha não delimitada será mesclada com a primeira linha do próximo arquivo e possivelmente anulará o resultado.

-size +1c é uma otimização, pois os arquivos de texto que estão vazios ou contêm apenas um caractere têm, respectivamente, 0 linhas e 1 linha vazia, portanto, não terão a linha mais longa.

    
por 18.08.2014 / 17:23
0

Também com o GNU wc (coreutils 8.4), ele pode manipular vários arquivos

wc -L *.txt
  • lista o tamanho de cada arquivo individual
  • , além de fornecer o comprimento mais longo de todos os arquivos
por 13.02.2015 / 15:43

Tags