• <fieldset id='b94eh'></fieldset>

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

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

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

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

            • 时间:
            • 浏览:12
            • 来源: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