Verarbeiten Sie jede Zeile einer Datei in Bash

11389
Nifle

Wenn ich etwas mit jeder Zeile in einer Datei machen möchte, schreibe ich normalerweise

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

Der GZIP ist nur ein Beispiel, es kann alles sein.

Was ich mich wundere ist, wenn es einen anderen Weg gibt, die Zeilen als zu bekommen cat file | while read?

6

3 Antworten auf die Frage

14
Liquid_Fire

Sie brauchen nicht zu verwenden cat:

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

Ich glaube nicht, dass es einen einfacheren Weg gibt.

+1 Zusätzlich zur Vermeidung einer UUoC verhindert dies auf diese Weise auch das Erstellen einer Subshell, sodass die während der Schleife festgelegten Variablen auch nach der Schleife verfügbar sind (auch wenn Sie sich noch in einem Verzeichnis befinden, in das Sie sich "cd" befinden TU das). Dennis Williamson vor 13 Jahren 1
2
garyjohn

Das einfachste, denke ich, wäre zu verwenden xargs, zB

xargs -L1 gzip < my_file 

Die -L1Option weist xargsan, jeweils eine Eingabezeile zu verarbeiten. Sie können auch einen Blick auf GNU parallel werfen, was sehr ähnlich ist, xargsaber in manchen Situationen mächtiger ist.

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