Estou interessado em descobrir o número da linha mais longa de um arquivo.
Por exemplo, se eu tiver um arquivo com o seguinte conteúdo:
lalala
tatatata
abracadabra
mu mu mu
como posso escrever um script bash que me dará uma saída parecida com esta 3 -> abracadabra
:?
command-line
bash
scripts
user214965
fonte
fonte
^
) e o final ($
), tenha exatamente n caracteres (.{n}
). Então ele só precisa encontrar n: para isso, ele usa um GNU-ism, "wc -L filename" (observe que este não é posix), que retorna o comprimento da linha mais longa do nome do arquivo. Então ele cumprimenta qualquer linha que tenha o maior comprimento.$(cmd)
é substituído pela saída decmd
.-C 3
às opções grep para obter algumas linhas antes e depois do contextoVocê pode usar
awk
para imprimir o comprimento de cada linha (length()
) e o número da linha (NR
) e inverter (-r
)sort
o resultado pelo número (-n
):Para mostrar apenas a primeira linha:
fonte
wc -L
, eu não sabia sobre esse argumento. É realmente muito útil.AO (N) pode ser alcançado com um liner perl one:
usos (em que machin é um nome de arquivo)
ou
ou (menos claro, mas mais curto)
fonte
O (n) Para máquinas, por exemplo, OpenWRT, em que o perl não está disponível, a versão @ awk @ pode ser útil.
ou python:
fonte
A resposta de Radu é perfeitamente suficiente e preferida, embora se você quiser uma solução mais explícita e baseada em shell, use o seguinte script:
Uso:
./find_longest.sh input.txt
Exemplo:
fonte