Shell读取⽂本内容
在Linux中有很多⽅法逐⾏读取⼀个⽂件的⽅法,其中最常⽤的就是下⾯的脚本⾥的⽅法,⽽且是效率最⾼,使⽤最多的⽅法。为了给⼤家⼀个直观的感受,我们将通过⽣成⼀个⼤的⽂件的⽅式来检验各种⽅法的执⾏效率。
⽅法1:while循环中执⾏效率最⾼,最常⽤的⽅法。
function while_read_LINE_bottm(){
While read LINE
dod
echo $LINE
done  < $FILENAME
}
注释:我习惯把这种⽅式叫做read釜底抽薪,因为这种⽅式在结束的时候需要执⾏⽂件,就好像是执⾏完
的时候再把⽂件读进去⼀样。
⽅法2 :重定向法;管道法: cat $FILENAME | while read LINE
Function While_read_LINE(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}
注释:我只所有把这种⽅式叫做管道法,相⽐⼤家应该可以看出来了吧。当遇见管道的时候管道左边的命令的输出会作为管道右边命令的输⼊然后被输⼊出来。
⽅法3:⽂件描述符法
Function while_read_line_fd(){
Exec 3<&0
Exec 0<$FILENAME
While read LINE
Do
Echo $LINE
Exec 0<&<3
}
注释:这种⽅法分2步骤,第⼀,通过将所有内容重定向到⽂件描述符3来关闭⽂件描述符0.为此我们⽤了语法Exec 3<&0 。第⼆部将输⼊⽂件放送到⽂件描述符0,即标准输⼊。
⽅法4    for  循环。
function  for_in_file(){
For  i  in  `cat $FILENAME`
do
echo $i
done
}
注释:这种⽅式是通过for循环的⽅式来读取⽂件的内容相⽐⼤家很熟悉了,这⾥不多说。
对各个⽅法进⾏测试,看那⽅法的执⾏效率最⾼。
⾸先我们⽤脚本(脚本见附件)⽣成⼀个70000⾏的⽂件,⽂件位置在/scripts/bigfile。然后通过下⾯的脚本来测试各个⽅法的执⾏效率,脚本很简单,不再解释。
#!/bin/bash
FILENAME="$1"
TIMEFILE="/tmp/loopfile.out" > $TIMEFILE    /// 输出重定向;;;
SCRIPT=$(basename $0)    ///              $(basename 'filename') ;; //
function usage(){
echo -e "\nUSAGE: $SCRIPT file \n"
exit 1
}
function while_read_bottm(){
while read LINE
do
echo $LINE
done < $FILENAME
}
function while_read_line(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}
function while_read_line_fd(){
exec 3<&0
exec 0< $FILENAME
while read LINE
do
echo $LINE
done
exec 0<&3
}
function for_in_file(){
for i in  `cat $FILENAME`
do
echo $i
done
}
if [ $# -lt 1 ] ; then
usage
fi
echo -e " \n starting file processing of each method\n" echo -e "method 1:"
echo -e "function while_read_bottm"
time while_read_bottm >> $TIMEFILE
echo -e "\n"
echo -e "method 2:"
echo -e "function while_read_line "
time while_read_line >> $TIMEFILE
echo -e "\n"
echo -e "method 3:"
echo "function while_read_line_fd"
time while_read_line_fd >>$TIMEFILE
echo -e "\n"
echo -e "method 4:"
echo -e "function  for_in_file"
time  for_in_file >> $TIMEFILE
执⾏脚本后: [root@localhost shell]# ./while /scripts/bigfile
脚本输出内容:
method 1:
function while_read_bottm
linux怎么读文件内容real    0m5.689s
user    0m3.399s
sys    0m1.588s
method 2:
function while_read_line
real    0m11.612s
user    0m4.031s
sys    0m4.956s
method 3:
function while_read_line_fd
real    0m5.853s
user    0m3.536s
sys    0m1.469s
method 4:
function  for_in_file
real    0m5.153s
user    0m3.335s
sys    0m1.593s
下⾯我们对各个⽅法按照速度进⾏排序。
real    0m5.153s    method 4 (for 循环法)
real    0m5.689s    method 1  (while 釜底抽薪法)
real    0m5.853s    method 3    (标识符法)
real    0m11.612s  method 2    (管道法)
由此可见在各个⽅法中,for语句效率最⾼,⽽在while循环中读写⽂件时,while read LINE
do
echo $LINE
done < $FILENAME
⽅式执⾏效率最⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。