Estoy interesado en averiguar el número de línea de la línea más larga de un archivo.
Por ejemplo, si tengo un archivo con el siguiente contenido:
lalala
tatatata
abracadabra
mu mu mu
¿Cómo puedo escribir un script bash que me dará un resultado como este 3 -> abracadabra
:?
command-line
bash
scripts
usuario214965
fuente
fuente
^
) y su final ($
) tenga exactamente n caracteres (.{n}
). Entonces solo necesita encontrar n: para esto usa un GNU-ism, "wc -L filename" (tenga en cuenta que esto no es posix) que devuelve la longitud de la línea más larga de nombre de archivo. Entonces él escoge cualquier línea que tenga la longitud más larga.$(cmd)
se reemplaza por la salida decmd
.-C 3
a las opciones grep para obtener algunas líneas antes y después para el contextoPuede usar
awk
para imprimir la longitud de cada línea (length()
) y el número de línea (NR
), luego invertir (-r
)sort
el resultado por número (-n
):Para mostrar solo la primera línea:
fuente
wc -L
, no sabía sobre ese argumento. Es muy útil de hecho.AO (N) se puede lograr con un perl one liner:
usos (donde machin es un nombre de archivo)
o
o (menos claro pero más corto)
fuente
O (n) Para máquinas, por ejemplo OpenWRT, donde perl no está disponible, la versión @ awk @ podría ser útil.
o pitón:
fuente
La respuesta de Radu es perfectamente suficiente y preferida, aunque si desea una solución más explícita y basada en shell, puede usar el siguiente script:
Uso:
./find_longest.sh input.txt
Ejemplo:
fuente