wc -l file.txt
Produce el número de líneas y el nombre del archivo.
Solo necesito el número en sí (no el nombre del archivo).
puedo hacer esto
wc -l file.txt | awk '{print $1}'
Pero tal vez hay una mejor manera?
wc -l file.txt
Produce el número de líneas y el nombre del archivo.
Solo necesito el número en sí (no el nombre del archivo).
puedo hacer esto
wc -l file.txt | awk '{print $1}'
Pero tal vez hay una mejor manera?
Respuestas:
Intenta de esta manera:
wc -l < file.txt
wc -lno debería emitir uno, y ¿por qué ksh antepone la salida estándar de un programa con un espacio?
4711 [stdin]como la salida.
printf "%'d", que cuida el espacio e imprime números grandes muy bien.
cat file.txt | wc -l
De acuerdo con la página del manual (para la versión BSD, no tengo una versión GNU para verificar):
Si no se especifican archivos, se utiliza la entrada estándar y no se muestra el nombre del archivo. La solicitud aceptará la entrada hasta recibir EOF o [^ D] en la mayoría de los entornos.
wc -l < file.txttiene el mismo efecto
wc -l < file.txtpara evitar el uso inútil del gato. Aunque estás absolutamente loco si crees que eso está consumiendo un tiempo notable.
Para hacer esto sin el espacio inicial, ¿por qué no?
wc -l < file.txt | bc
wc -l < file.txtpara solucionar el error de análisis y eliminar el espacio:wc -l < file.txt | bc
Qué tal si
wc -l file.txt | cut -d' ' -f1
es decir, canalice la salida de wcen cut(donde los delimitadores son espacios y seleccione solo el primer campo)
wc -l file.txt | awk '{print $1}'OP intentó.
wc -l < file.txtmétodo. Pero debe usarse | cut -d' ' -f2en BSD, siempre que el wccomando devuelva un espacio inicial, por ejemplo: "34068289 file.txt", en lugar de "34068289 file.txt".
Tuve un problema similar al intentar obtener un recuento de caracteres sin el espacio en blanco principal proporcionado por wc, lo que me llevó a esta página. Después de probar las respuestas aquí, los siguientes son los resultados de mis pruebas personales en Mac (BSD Bash). De nuevo, esto es para contar personajes; para el recuento de líneas que harías wc -l. echo -nomite el salto de línea final.
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
No confiaría en el cut -f*método en general, ya que requiere que sepas el número exacto de espacios iniciales que puede tener cualquier salida dada. Y el grepque funciona para contar líneas, pero no caracteres.
bces el más conciso awky perlparece un poco exagerado, pero todos deberían ser lo suficientemente rápidos y portátiles.
También tenga en cuenta que algunos de estos también se pueden adaptar para recortar el espacio en blanco circundante de las cadenas generales (junto con echo `echo $FOO`otro truco ordenado).
echo $(printf '%s' "$FOO" | wc -c)Es una de las raras ocasiones en que echocon un comando subshitution no es inútil.
echo `echo $FOO`;también actúa como un comando String.trim () en una variable! Eso es increíblemente útil. También agregaré tu línea a mi respuesta.
printf mejor que echo?
Obviamente, hay muchas soluciones para esto. Sin embargo, aquí hay otro:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
Esto solo genera el número de líneas, pero el carácter de nueva línea final ( \n) está presente, si tampoco lo desea, reemplace [:blank:]con [:space:].
test9con 1 línea, la salida será 19.
La mejor manera sería, en primer lugar, encontrar todos los archivos en el directorio y luego usar AWK NR (variable de número de registros)
a continuación se muestra el comando:
find <directory path> -type f | awk 'END{print NR}'
ejemplo: - find /tmp/ -type f | awk 'END{print NR}'
wc -l < file.txthace el trabajo de manera precisa y concisa.