<span id='dx04v'></span>
    <acronym id='dx04v'><em id='dx04v'></em><td id='dx04v'><div id='dx04v'></div></td></acronym><address id='dx04v'><big id='dx04v'><big id='dx04v'></big><legend id='dx04v'></legend></big></address>
  1. <tr id='dx04v'><strong id='dx04v'></strong><small id='dx04v'></small><button id='dx04v'></button><li id='dx04v'><noscript id='dx04v'><big id='dx04v'></big><dt id='dx04v'></dt></noscript></li></tr><ol id='dx04v'><table id='dx04v'><blockquote id='dx04v'><tbody id='dx04v'></tbody></blockquote></table></ol><u id='dx04v'></u><kbd id='dx04v'><kbd id='dx04v'></kbd></kbd>

  2. <dl id='dx04v'></dl>

    <code id='dx04v'><strong id='dx04v'></strong></code>

    <fieldset id='dx04v'></fieldset>

      <ins id='dx04v'></ins>
          <i id='dx04v'></i>

          <i id='dx04v'><div id='dx04v'><ins id='dx04v'></ins></div></i>

          shell下同时读取多个文件的方法

          • 时间:
          • 浏览:10
          • 来源:124软件资讯网

              1. 单个文件的读取

              在shell剧本下  ,可以多种方式实现按行读取文件 ,如下:

              for line in `cat ${input_filename}`

              do

              echo $line

              done

              while read line

              do

              echo $line

              done < ${input_filename}

              其中第二种方式是将文件重定向到尺度输入中

              2. 多个文件读取要领

              那怎样实现同时多个文件的读呢?

              我们可以继续使用bash中的文件重定向功效  ,将文件重定向到特定的文件形貌符中  ,语法如下:

              n

              n>file

              n>>file

              n<>file

              这里的n代表打开文件file的文件形貌符  ,类似其他编程语言中的fd  ,若是没有指定n  ,则其默认行为如下:

              

              >file #same as 1>file

              <>file #same as 0<>file

              我们可以通过exec下令来打开所要重定向的文件:

              exec 7

              exec 8

              然后我们可以通过read下令来读取对应文件的内容:

              read data <&7 #使用切合是为了区分7是文件形貌符 ,而不是文件名

              read data <&8

              关闭文件

              exec 7

              exec 8

              多文件读取示例代码如下:

              readfiles() {

              local FD1=7

              local FD2=8

              local file1=$1

              local file2=$2

              local count1=0

              local count2=0

              local eof1=0

              local eof2=0

              local data1

              local data2

              # Open files.

              exec 7<$file1

              exec 8<$file2

              while [[ $eof1 -eq 0 || $eof2 -eq 0 ]]

              do

              if read data1<&$FD1; then

              let count1++

              printf "%s, line %d: %s\n" $file1 $count1 "$data1"

              else

              eof1=1

              fi

              if read data2 <&$FD2; then

              let count2++

              printf "%s, line %d: %s\n" $file2 $count2 "$data2"

              else

              eof2=1

              fi

              done

              }

              #read file1 and file2

              readfiles file1 file2