Elabora ogni riga di un file in bash


6

Quando voglio fare qualcosa con ogni riga di un file di solito scrivo

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

Il gzip è solo un esempio che può essere qualsiasi cosa.

Quello che mi chiedo è se c'è un altro modo per ottenere le linee di cat file | while read?

Risposte:


15

Non è necessario utilizzare cat:

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

Non penso che ci sia un modo più semplice però.


1
+1 Oltre a evitare un UUoC, farlo in questo modo impedisce anche la creazione di una subshell in modo che le variabili impostate durante il ciclo siano ancora disponibili dopo il ciclo (anche se ci si troverà in una directory cd, se lo si fa) .
Dennis Williamson,

3

Il più semplice, penso, sarebbe usare xargs, ad esempio,

xargs -L1 gzip < my_file

L' -L1opzione indica xargsdi elaborare una riga di input alla volta. Potresti dare un'occhiata anche al GNU parallelo , che è molto simile xargsma più potente in alcune situazioni.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.