【发布时间】:2011-01-08 16:06:14
【问题描述】:
我有这个脚本
for i in `cat file`
do
echo $i
done
如何在同一个循环中拥有来自 2 个不同文件的 2 个变量
得到
echo $i + $f
【问题讨论】:
我有这个脚本
for i in `cat file`
do
echo $i
done
如何在同一个循环中拥有来自 2 个不同文件的 2 个变量
得到
echo $i + $f
【问题讨论】:
使用经典 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
【讨论】:
您可以使用以下脚本:
#!/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 来创建一个在两个文件之间交替的新参数序列,然后是一个非常简单的状态机来拾取和处理这些对。
请记住,如果您的行包含空格,它将不起作用,但我假设这不是问题,因为您的原始脚本也没有。
【讨论】:
while IFS='|' read -r i j; do echo $i and $j; done < <(paste -d '|' file1 file2)
通过选择未出现在数据中的分隔符,即使数据包含空格(例如),这也将起作用。
【讨论】: