Estoy buscando una manera simple de encontrar la longitud de la línea más larga en un archivo. Idealmente, sería un simple comando bash shell en lugar de un script.
198
Usando wc (GNU coreutils) 7.4:
wc -L filename
da:
101 filename
-c -l -m -w
opciones son POSIX.-L
Es un GNUismo.-L
depende de la configuración regional. ¡Algunos caracteres (tanto en el byte como en el sentido multibyte) pueden incluso no contarse en absoluto!wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
está en lacoreutils
fórmula, que instala todos los coreutils de GNU con ung
prefijo.Como referencia: encontrar la línea más larga en un archivo
fuente
END{}
bloque.fuente
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
Solo por diversión y con fines educativos, la solución de shell POSIX pura , sin uso inútil de cat y sin bifurcación a comandos externos. Toma el nombre de archivo como primer argumento:
fuente
< "$1"
puede leer fácilmente desde stdin. Con una prueba$#
incluso podría hacer ambas cosas, dependiendo de la cantidad de args. Simplemente no hay necesidad de gatos inútiles en este mundo. Los novatos deben ser enseñados en consecuencia desde el principio.longest < /usr/share/dict/words
da
fuente
wc
el nombre de archivoImprime la longitud, el número de línea y el contenido de la línea más larga.
Imprime una lista ordenada de todas las líneas, con números y longitudes de línea.
.
es el operador de concatenación: se usa aquí después de length ()$.
es el número de línea actual$_
es la línea actualfuente
wc -L
Es la mejor solución que vi hasta ahora.wc -L
tomó 3 segundoswc -L
solo cuente los registros de números: esta Q estaba a punto de encontrar la línea más larga , no es exactamente lo mismo, por lo que esta no es una comparación precisa.Punto importante pasado por alto en los ejemplos anteriores.
Los siguientes 2 ejemplos cuentan pestañas expandidas
Los siguientes 2 cuentan pestañas no expandidas.
entonces
fuente
Parece que todas las respuestas no dan el número de línea de la línea más larga. El siguiente comando puede dar el número de línea y la longitud aproximada:
fuente
awk '{print length}' test.txt | sort -rn | head -1
. Si también necesita el contenido real de la línea, entoncesawk '{print length,$0}' test.txt | sort -k1 -rn| head -1
En perl:
esto solo imprime la línea, no su longitud también.
fuente
Aquí hay referencias de la respuesta
http://wtanaka.com/node/7719
fuente
Solo por diversión, aquí está la versión Powershell:
Y solo para obtener la longitud:
fuente
sort
tomar filename.txt como argumento? Entonces el gato es inútil porquesort length filename.txt | select -last 1
evita una tubería y un proceso que simplemente copia datos.Estoy en un entorno Unix y trabajo con archivos comprimidos que tienen un tamaño de unos pocos GB. Probé los siguientes comandos usando un archivo comprimido de 2 GB con una longitud de registro de 2052.
zcat <gzipped file> | wc -L
y
zcat <gzipped file> | awk '{print length}' | sort -u
Los tiempos estaban en una avarage
117 segundos
109 segundos
Aquí está mi script después de aproximadamente 10 ejecuciones.
fuente
awk
versión se beneficie del almacenamiento en caché del bloque de disco de lawc
versión que se está ejecutando primero (y genera la memoria caché del disco). Tendría que aleatorizar el orden de quién llama primero durante las diez carreras para que este argumento se mantenga.Variación sobre el tema.
Este mostrará todas las líneas que tengan la longitud de la línea más larga encontrada en el archivo, conservando el orden en que aparecen en la fuente.
Entonces mi archivo
daré
fuente
Si está utilizando MacOS y obtiene este error:
wc: illegal option -- L
no necesita instalar GNU sipmly, haga esto.Si todo lo que quiere hacer es obtener el recuento de los caracteres en la línea más larga del archivo y está utilizando OS X run:
awk '{print length}' "$file_name" | sort -rn | head -1
Algo como esto;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Salidas:
The longest line in the file my_file has 117 characters
fuente