From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2387.html

在linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法。为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率。

方法1:while循环中执行效率最高,最常用的方法。
function while_read_LINE_bottm(){
While read LINE
do
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)
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

方式执行效率最高。

Linux shell逐行读取文件的方法-比较相关推荐

  1. Linux shell逐行读取文件的方法

    Linux shell逐行读取文件的方法 来源:互联网  在linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受, ...

  2. linux shell读取文件,Linux shell逐行读取文件的方法

    方法1:while循环中执行效率最高,最常用的方法. function while_read_LINE_bottm(){ While read LINE do echo $LINE done } 注释 ...

  3. Linux bash逐行读取文件的方法

    方法一,指定换行符读取: for LINE in `cat /etc/passwd`   do      echo $LINE  done 方法二,文件重定向给read处理: cat /etc/pas ...

  4. shell逐行读取文件拼接Sql语句并访问数据库

    下面这段代码是逐行读取一个文件,这个文件中每行是一个id,这段代码,每次读取1000行即1000个id,然后拼接成一个sql,类似于如下格式的sql: select * from table wher ...

  5. shell逐行读取文件

    #! /bin/bash clear exec 4<&0 0< /home/lbxwz/find.txt read line1 read line4 read line3 exec ...

  6. linux脚本中如何读取文件,如何在Shell脚本中逐行读取文件

    原标题:如何在Shell脚本中逐行读取文件 在这里,我们学习Shell脚本中的3种方法来逐行读取文件. 方法一.使用输入重定向 逐行读取文件的最简单方法是在while循环中使用输入重定向. 为了演示, ...

  7. Go语言逐行读取文件的三种方法

    Go语言有三种逐行读取文件的方法,依次是 ReadString func (b *Reader) ReadString(delim byte) (string, error)ReadString从输入 ...

  8. linux shell 按行 逐行 读取文件

    Shell按行读取文件的方法有很多,下面写出三种方法: 写法一: #!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/l ...

  9. python 四种逐行读取文件内容的方法

    目录 方法一:readline函数 方法二:一次读取多行数据 方法三:直接for循环 方法四:使用fileinput模块 下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用 ...

最新文章

  1. REPL (read-evaluate-print-loop)概念-读取评估打印循环
  2. python怎么和sql一起用_自己写的Python数据库连接类和sql语句拼接方法
  3. python长格式_python中宽格式数据帧到长格式数据帧的转换
  4. 三级栏目选项卡 html,李长河 中文主页 实验题目三级页面(隐藏栏目,用于放置对应三级页面) 中国地质大学(武汉)教师个人主页系统...
  5. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁
  6. 01_python2.x和python3.x中range()的区别
  7. Tomcat详解(一)——tomcat基础知识
  8. IS-IS详解(十九)——IS-IS 与IPv6
  9. STP根交换机,指定端口,根端口,阻塞端口
  10. 这些单晶XRD测试问题你了解吗?(一)
  11. 为什么都不想去中科创达_那些过年不想回家的人,都去了哪?
  12. 毕业论文html代码查重吗,毕业论文中的代码内容重复了怎么办? 毕业论文代码重复率高...
  13. 用Python爬取英雄联盟(lol)全部皮肤
  14. 区块链和去中心化的弱点
  15. Linux 文本对比 diff
  16. Quartus的SignalTap的使用
  17. Java二维码的一些简介、功能
  18. (转)如何有效地管理好技术团队?
  19. Python:打包生成.pyc、.pyd文件
  20. 阿里云 CDN 问题排查

热门文章

  1. 各种URL生成方式的性能对比
  2. JS获取当前对象大小以及屏幕分辨率等
  3. css左右布局代码_如何使用CSS位置来布局网站(带有示例代码)
  4. cake php_如何(以及为什么)在Swinject中使用Cake Pattern
  5. linux 机器格式化_为什么机器人应该为我们格式化代码
  6. 2019 6月编程语言_六月开始提供435项免费在线编程和计算机科学课程
  7. 移动平均线ma分析_使用动态移动平均线构建交互式库存量和价格分析图
  8. 404. Sum of Left Leaves
  9. linux awk 常见字符串处理
  10. Linux命令简单操作之lsof