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 linha mais longa de todos os arquivos em um diretório?
A solução mais direta é 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}' ./*
Obviamente, 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 .txt
arquivos no diretório atual.
E, como o @ G-Man afirmou em seu comentário, *
não corresponderá a arquivos ocultos (começando com um ponto). Se você quiser, use * .*
.
cat * .* | ...
,. Ou elimine o uso inútil do gato e digaawk '...' * .*
.Com o GNU
wc
:-L
imprime o comprimento da linha mais longa.fonte
Se você deseja o tamanho máximo por arquivo, com o GNU awk:
Ou o comprimento máximo em todos os arquivos:
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 linha e 1 linha vazia, portanto, não terão a linha mais longa.fonte
Também com o GNU wc (coreutils 8.4), ele pode lidar com vários arquivos
fonte
wc -L
faz, mas sua solução tem a desvantagem de que você precisa percorrer primeiro o comprimento máximo de todos os outros arquivos. Existe alguma vantagem nisso?