2012-10-04 59 views
9

Duplicar posibles:
bash echo number of lines of file given in a bash variableNúmero de salida de líneas en un archivo de texto a la pantalla en Unix

preguntaba cómo dar salida a un número de líneas en un archivo de texto en pantalla y luego almacenarlo en una variable. tengo un archivo llamado stats.txt y cuando corro wc -l stats.txt emite 8 stats.txt

He intentado hacer x = wc -l stats.txt pensando que iba a almacenar sólo el número y el resto es sólo para visual, pero no funciona :(

gracias por la ayuda

+2

¿Qué tal 'x = $ (wc -l

+0

Un tutorial de bash puede ayudarlo: http://tldp.org/LDP/Bash-Beginners-Guide/html/ –

Respuesta

2

puede intentar:

x=`cat stats.txt | wc -l` 

o (a partir de la observación de la another.anon.coward):

x=`wc -l < stats.txt` 
+1

Puede hacerlo sin 'cat' & pipe como' x = $ (wc -l

+0

@gokcehan cuando lo ejecuté ---- cat coursefile.txt | wc -l ----- funcionó. sin embargo, cuando traté de almacenarlo, recibí un error: -bash: x: comando no encontrado – Masterminder

+0

no se olvide de los backticks ('') – none

16

Hay dos POSIX sintaxis estándar para hacer esto:

x=`cat stats.txt | wc -l` 

o

x=$(cat stats.txt | wc -l) 

Ambos ejecutar el programa y vuelva a colocar la invocación en el guión con la salida estándar de la orden, en este caso asignándolo a la variable $x. Sin embargo, tenga en cuenta que ambos recortan las nuevas líneas finales (esto es realmente lo que quiere aquí, pero a veces puede ser peligroso cuando espera una nueva línea).

Además, el segundo caso se puede anidar fácilmente (ejemplo: $(cat $(ls | head -n 1) | wc -l)). También puede hacerlo con el primer caso, pero es más complejo:

`cat \`ls | head -n 1\` | wc -l` 

También hay problemas con las cotizaciones. Puede incluir estas expresiones dentro de las comillas dobles, pero con las copias de las garrapatas, debe continuar citando el interior del mando, durante el uso de los paréntesis le permite "inicia una nueva citar" grupo:

"`echo \"My string\"`" 
"$(echo "My string")" 

Espero que esto ayude =)

+0

gracias por la ayuda – Masterminder

+2

No hay necesidad de 'gato' o cualquier redirección/tuberías - simplemente hazlo: x = $ (wc -l /path/to/file.txt) –

Cuestiones relacionadas