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.

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.


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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.