Je souhaite connaître le numéro de ligne de la plus longue ligne d'un fichier.
Par exemple, si j'ai un fichier avec le contenu suivant:
lalala
tatatata
abracadabra
mu mu mu
comment puis-je écrire un script bash qui me donnera une sortie quelque chose comme ceci 3 -> abracadabra
:?
command-line
bash
scripts
user214965
la source
la source
^
) et sa fin ($
) a exactement n caractères (.{n}
). Ensuite, il a juste besoin de trouver n: pour cela, il utilise un GNU-isme, "wc -L filename" (notez que ce n'est pas posix) qui retourne la longueur de la plus longue ligne de nom de fichier. Donc, il attrape n'importe quelle ligne qui a la plus longue longueur.$(cmd)
est remplacé par la sortie decmd
.-C 3
aux options grep pour obtenir quelques lignes avant et après pour le contexteVous pouvez utiliser
awk
pour imprimer la longueur de chaque ligne (length()
) et le numéro de ligne (NR
), puis inverser (-r
)sort
le résultat par numéro (-n
):Pour afficher uniquement la première ligne:
la source
wc -L
, je ne connaissais pas cet argument. C'est très utile en effet.L'AO (N) peut être obtenu avec un revêtement perl one:
utilisations (où machin est un nom de fichier)
ou
ou (moins clair mais plus court)
la source
O (n) Pour les machines, par exemple OpenWRT, où perl n'est pas disponible, @ awk @ version peut être utile.
ou python:
la source
La réponse de Radu est parfaitement suffisante et préférée, bien que si vous voulez une solution plus explicite et basée sur le shell, vous pouvez utiliser le script suivant:
Usage:
./find_longest.sh input.txt
Exemple:
la source