para i en el tipo `cat file` con 2 variables y 2 archivos

tengo este script

for i in `cat file`
do
echo $i
done

¿Cómo puedo tener en el mismo bucle 2 variables de 2 archivos diferentes?

para obtener

echo $i + $f

preguntado el 08 de enero de 11 a las 16:01

3 Respuestas

while IFS='|' read -r i j; do echo $i and $j; done < <(paste -d '|' file1 file2)

Al elegir un delimitador que no aparece en sus datos, esto funcionará incluso si los datos incluyen espacios (por ejemplo).

Respondido el 08 de enero de 11 a las 20:01

Una solución simple que usa el shell clásico, en lugar de las construcciones específicas de Bash, usa:

paste file1 file2 |
while read i j
do echo $i and $j
done

Esto supone que no hay espacios en los datos del archivo1 (los espacios en el archivo2 se manejan de todos modos porque j obtiene la segunda palabra y las siguientes en cada línea de entrada). Si necesita preocuparse por eso, entonces puede jugar con IFS, etc.

paste -d'|' file1 file2 |
while IFS='|' read i j
do echo $i and $j
done

Respondido el 08 de enero de 11 a las 21:01

Puedes hacerlo con el siguiente script:

#!/usr/bin/bash

state=0
for i in $(paste file1 file2) ; do
    if [[ $state -eq 0 ]] ; then
        state=1
        save=$i
    else
        state=0
        echo $save and $i
    fi
done

Con los dos archivos de entrada:

$ cat file1
1
2
3
4
5

y:

$ cat file2
a
b
c
d
e

obtienes el siguiente resultado:

1 and a
2 and b
3 and c
4 and d
5 and e

Este script usa pegar para crear básicamente una nueva secuencia de argumentos alternando entre los dos archivos, luego una máquina de estado muy simple para recoger y procesar los pares.

Tenga en cuenta que no funcionará si sus líneas contienen espacios en blanco, pero supongo que eso no es un problema, ya que su script original tampoco.

Respondido el 08 de enero de 11 a las 19:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.