Procesar cada línea de un archivo en bash

6

Cuando quiero hacer algo con cada línea en un archivo, generalmente escribo

cat my_file | while read a
do
gzip "$a"
done

El gzip es solo un ejemplo, puede ser cualquier cosa.

Lo que me pregunto es si hay otra forma de obtener las líneas cat file | while read.

Nifle
fuente

Respuestas:

15

No necesitas usar cat:

while read line; do
    echo "$line"
done < my_file

Sin embargo, no creo que haya una manera más simple.

Fuego líquido
fuente
1
+1 Además de evitar un UUoC, hacerlo de esta manera también evita crear una subshell para que las variables establecidas durante el ciclo sigan estando disponibles después del ciclo (también estarás en un directorio que debes cd, si lo haces) .
Dennis Williamson
3

Lo más simple, creo, sería usar xargs, por ejemplo,

xargs -L1 gzip < my_file

La -L1opción le indica xargsque procese una línea de entrada a la vez. También puede echar un vistazo al paralelo GNU , que es muy similar xargspero más potente en algunas situaciones.

garyjohn
fuente
2
IFS="\n\b"; for i in $MYROWOFCONTENT; do echo $i; done;
usuario1529891
fuente