我有两个文件,我试图逐行读取,但我只想在循环的任何给定迭代中继续只读取文件或其他文件。 (我也不确定如何检查EOF)。这是我的伪代码:
#initialize variables
line1=read <file1.txt
line2=read <file2.txt
#compare lists
while true
do
#check if there is a match
if [[ "$line1" == "$line2" ]]
then
echo match
break
elif [ "$line1" -lt "$line2" ]
then
line1=read <file1.txt # <-SHOULD READ NEXT LINE OF F1
else
line2=read <file2.txt # <-SHOULD READ NEXT LINE OF F2
fi
#Check for EOF
if [[ "$line1" == EOF || "$line2" == EOF ]]
then
break
fi
done
显然,现在看来,这将继续只读F1和F2的第一行。 任何帮助将不胜感激!
答案 0 :(得分:1)
您需要打开每个文件一次,这样您就不会在每次读取之前重置文件指针。 read
只要尝试读取文件的最后一行就会有非零退出状态,因此您可以检查是否终止循环。
{
read line1 <&3
read line2 <&4
while true; do
#check if there is a match
if [[ "$line1" == "$line2" ]]; then
echo match
break
elif [ "$line1" -lt "$line2" ]; then
read line1 <&3 || break
else
read line2 <&4 || break
fi
done
} 3< file1.txt 4< file2.txt