Bash 对于'cat file'中的i,键入2个变量和2个文件
我有这个剧本Bash 对于'cat file'中的i,键入2个变量和2个文件,bash,for-loop,Bash,For Loop,我有这个剧本 for i in `cat file` do echo $i done 如何在同一个循环中包含来自2个不同文件的2个变量 得到 echo $i + $f 可以使用以下脚本执行此操作: #!/usr/bin/bash state=0 for i in $(paste file1 file2) ; do if [[ $state -eq 0 ]] ; then state=1 save=$i else state=0
for i in `cat file`
do
echo $i
done
如何在同一个循环中包含来自2个不同文件的2个变量
得到
echo $i + $f
可以使用以下脚本执行此操作:
#!/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
以及:
您将获得以下输出:
1 and a
2 and b
3 and c
4 and d
5 and e
这个脚本使用粘贴基本上在两个文件之间创建一个新的参数序列,然后使用一个非常简单的状态机来拾取和处理这些参数对
请记住,如果您的行中包含空格,它将不起作用,但我假设这不是问题,因为您的原始脚本也没有空格。
,而IFS='|'read-r I j;不要重复$i和$j;完成<使用经典shell而非特定于Bash的结构的简单解决方案使用:
while IFS='|' read -r i j; do echo $i and $j; done < <(paste -d '|' file1 file2)
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
paste -d'|' file1 file2 |
while IFS='|' read i j
do echo $i and $j
done