如何在bash中读取一个文件或另一个文件?

时间:2017-08-14 16:40:26

标签: bash list compare readfile

我有两个文件,我试图逐行读取,但我只想在循环的任何给定迭代中继续只读取文件或其他文件。 (我也不确定如何检查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的第一行。 任何帮助将不胜感激!

1 个答案:

答案 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