Hay otras soluciones sino una simple que lo general el uso es para poner la salida del wc
en un archivo temporal, y luego leer desde allí:
wc file.txt > xxx
read lines words characters filename < xxx
echo "lines=$lines words=$words characters=$characters filename=$filename"
lines=2 words=5 characters=23 filename=file.txt
La ventaja de este método es que no necesita crear varios procesos awk
, uno para cada variable. La desventaja es que necesita un archivo temporal, que debe eliminar después.
Tenga cuidado: esto no funciona:
wc file.txt | read lines words characters filename
El problema es que la tubería para read
crea otro proceso, y las variables se actualizan allí, por lo que no son accesibles en la cáscara de llamada.
Editar: la adición de la solución por arnaud576875:
read lines words chars filename <<< $(wc x)
obras sin escribir en un archivo (y no tienen un problema de la tubería). Es bash específico.
Desde el manual de bash:
Here Strings
A variant of here documents, the format is:
<<<word
The word is expanded and supplied to the command on its standard input.
La clave es la "palabra se expande" bits.
Mejor que el mío, pero no necesita el archivo 'xxx' o el nombre del archivo:' wc
@Adrian: vea mi comentario anterior: la tubería crea variables en otro proceso, por lo que no están disponibles en el intérprete de comandos. – dangonfast
'leer líneas palabras caracteres <<< $ (wc x)' funciona sin escribir en un archivo (y no tiene problema con la tubería) – arnaud576875