我有这个脚本从两个文件中读取行并按以下顺序输出:
The first line of file1
the first line of file2
the second line of file1
the second line of file2
etc
如何在不使用脚本中的外部粘贴命令的情况下执行此操作?
paste -d'\n' file1 file2 | while read line1 && read line2;
do
#echo "$line1 $line2"
echo "$line1"
echo "$line2"
done
答案 0 :(得分:2)
使用文件描述符和read
,例如see here
exec 5< file1
exec 6< file2
read line1 <&5
read line2 <&6
echo -n "$line1\n$line2"
答案 1 :(得分:1)
bash.sh
#!/bin/bash
exec 3< bash.sh
exec 4< data
while read l1 <&3 && read l2 <&4
do
echo "$l1"
echo "$l2"
done
data
1908 462
232 538
232 520
232 517
./bash.sh
#!/bin/bash
1908 462
232 538
exec 3< bash.sh
232 520
exec 4< data
232 517
如果您不希望在到达第一个文件的末尾时结束,请使用此
#!/bin/bash
exec 3< aaa
exec 4< bbb
while true
do
end=1
read l <&3
if [ $? -eq 0 ];
then
echo "$l"
end=0
fi
read l <&4
if [ $? -eq 0 ];
then
echo "$l"
end=0
fi
if [ $end -eq 1 ];
then
break
fi
done
答案 2 :(得分:0)
while
的外部,以及某些封闭脚本文件的外部是两个不同的东西。您可以完全自由地将粘贴移动到文件中,并仍然可以将其导入while
内。
我不确定这是不是你要追求的。是吗?
答案 3 :(得分:0)
感谢那篇文章Kerrek ....更新了我的代码,现在工作正常:
exec 5< file1
exec 6< file2
while read line1 <&5 && read line2 <&6
do
echo "$line1"
echo "$line2"
done