У меня есть вход (скажем, файл). В каждой строке есть имя файла. Как я могу прочитать этот файл и отобразить содержимое для каждого из них.
Bash цикл foreach
Ответ 1
Что-то вроде этого:
xargs cat <filenames.txt
Программа xargs
считывает свой стандартный ввод, и для каждой строки ввода выполняется программа cat
с входными строками в качестве аргумента (ов).
Если вы действительно хотите сделать это в цикле, вы можете:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
Ответ 2
"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/
Ответ 3
Вот цикл while
:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
Ответ 4
xargs --arg-file inputfile cat
Это приведет к отображению имени файла, за которым следует содержимое файла:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Ответ 5
Вы, вероятно, захотите обрабатывать пробелы в именах файлов, отвратительны, хотя они: -)
Итак, я бы выбрал сначала что-то вроде:
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> _
Ответ 6
cat `cat filenames.txt`
выполнит трюк