时间:2023-06-02 16:16:41 来源: 人气:
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: %sn" $file1 $count1 "$data1", else, eof1=1, fi, if read data2 <&$FD2; then, let count2++, printf "%s, line %d: %sn" $file2 $count2 "$data2", else, eof2=1, fi, done, }, #read file1 and file2, readfiles file1 file2,