Петля bash foreach - PullRequest
       3

Петля bash foreach

144 голосов
/ 12 ноября 2010

У меня есть вход (скажем, файл). На каждой строке есть имя файла. Как я могу прочитать этот файл и отобразить содержимое для каждого.

Ответы [ 6 ]

219 голосов
/ 12 ноября 2010

Примерно так:

xargs cat <filenames.txt

Программа xargs читает свой стандартный ввод и для каждой строки ввода запускает программу cat с входными строками в качестве аргумента (ов).

Если вы действительно хотите сделать это в цикле, вы можете:

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done
40 голосов
/ 26 августа 2014

«foreach» - это не название для bash.Это просто "для".Вы можете делать вещи в одну строку только как:

for fn in `cat filenames.txt`; do cat "$fn"; done

Ссылка: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/

17 голосов
/ 12 ноября 2010

Вот цикл while:

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt
5 голосов
/ 12 ноября 2010
xargs --arg-file inputfile cat

Будет выведено имя файла, за которым следует содержимое файла:

xargs --arg-file inputfile -I % sh -c "echo %; cat %"
4 голосов
/ 12 ноября 2010

Возможно, вы захотите обработать пробелы в именах файлов, хотя они и отвратительны: -)

Поэтому я бы изначально выбрал что-то вроде:

pax> cat qq.in
normalfile.txt
file with spaces.doc

pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>

pax> _
3 голосов
/ 22 марта 2017
cat `cat filenames.txt`

сделает свое дело

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...