one - Bash foreach loop
for loop shell bash (6)
"foreach" no es el nombre para bash. Es simplemente "para". Puedes hacer cosas en una línea solo como:
for fn in `cat filenames.txt`; do cat "$fn"; done
Referencia: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Tengo una entrada (digamos un archivo). En cada línea hay un nombre de archivo. ¿Cómo puedo leer este archivo y mostrar el contenido de cada uno?
Algo como esto haría:
xargs cat <filenames.txt
El programa xargs
lee su entrada estándar, y para cada línea de entrada ejecuta el programa cat
con las líneas de entrada como argumento (s).
Si realmente quieres hacer esto en un bucle, puedes:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
Aquí hay un ciclo while:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
Es probable que desee manejar espacios en los nombres de sus archivos, aunque aborrecibles son :-)
Entonces, optaría inicialmente por algo como:
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> _
cat `cat filenames.txt`
hará el truco
xargs --arg-file inputfile cat
Esto generará el nombre del archivo seguido del contenido del archivo:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"