Linux shell逐行读取文件的方法(转)
SCRIPT=$(basename $0)
?
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
?
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
方式执行效率最高。