我在'cat file`类型中有2个变量和2个文件

时间:2011-01-08 16:06:15

标签: bash for-loop

我有这个脚本

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

如何在2个不同文件中使用相同的循环2变量

获取

echo $i + $f

3 个答案:

答案 0 :(得分:3)

使用经典shell(而不是Bash特定)构造的简单解决方案使用:

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

这假设来自file1的数据中没有空格(无论如何都要处理file2中的空格,因为j获取每行输入的第二个和后续的单词)。如果你需要担心,那么你可以修补IFS等:

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

答案 1 :(得分:2)

您可以使用以下脚本执行此操作:

#!/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

使用两个输入文件:

$ cat file1
1
2
3
4
5

$ cat file2
a
b
c
d
e

你得到以下输出:

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

这个脚本使用paste基本上在两个文件之间交替创建一个新的参数序列,然后是一个非常简单的状态机来拾取和处理这些对。

请记住,如果你的行包含空格,它将无效,但我认为这不是问题,因为你的原始剧本也没有。

答案 2 :(得分:1)

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

通过选择未出现在数据中的分隔符,即使数据包含空格(例如),这也将起作用。