Обрабатывать каждую строку файла в bash

11147
Nifle

Когда я хочу что-то сделать с каждой строкой в ​​файле, я обычно пишу

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

GZIP это просто пример, это может быть что угодно.

Что мне интересно, есть ли другой способ получить строки, чем cat file | while read?

6

3 ответа на вопрос

14
Liquid_Fire

Вам не нужно использовать cat:

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

Я не думаю, что есть более простой способ, хотя.

+1 Кроме того, чтобы избежать UUoC, выполнение этого способа также предотвращает создание подоболочки, так что переменные, установленные во время цикла, будут по-прежнему доступны после цикла (также вы по-прежнему будете в каталоге, к которому вы `cd`, если вы сделай это). Dennis Williamson 13 лет назад 1
2
garyjohn

Я думаю, что проще всего было бы использовать xargs, например,

xargs -L1 gzip < my_file 

-L1Опция указывает xargsобрабатывать одну строку ввода в то время. Вы также можете взглянуть на параллельную GNU, которая очень похожа, xargsно в некоторых ситуациях более мощна.

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

Похожие вопросы