方法1:while循环中执行效率最高,最常用的方法。

function while_read_LINE_bottm(){

While read LINE

do

echo $LINE

done

}

注释:我习惯把这种方式叫做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

Exec 0

While read LINE

Do

Echo $LINE

Exec 0

}

注释: 这种方法分2步骤,第一,通过将所有内容重定向到文件描述符3来关闭文件描述符0.为此我们用了语法Exec 3

方法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

}

function while_read_line(){

cat $FILENAME | while read LINE

do

echo $LINE

done

}

function while_read_line_fd(){

exec 3

exec 0

while read LINE

do

echo $LINE

done

exec 0

}

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

方式执行效率最高。

linux shell读取文件,Linux shell逐行读取文件的方法相关推荐

  1. linux while read文件,linux shell脚本用while read逐行读取文本的问题

    问题: 我现在是想用一个脚本获取一定列表服务器的运行时间.首先我建立一个名字为ip.txt的IP列表(一个IP一行),再建好密钥实现不用密码直接登录.然后写脚本如下:#!/bin/bashwhile ...

  2. c语言文件按字节读取整数,C语言逐行读取文件

    C语言可以说是我学习的第一门语言,不过似乎也是忘的最多的一门语言,自从因为项目需要重新拾起C语言,我的噩梦就开始了. 依稀记得大二学习数据结构时编程解决"约瑟夫环"."迷 ...

  3. java 读取文件 效率_Java 逐行读取文本文件的几种方式以及效率对比

    前言 上周负责的模块中需要逐行读取文件内容, 写完之后对程序执行效率不太满意, 索性上网查了一下 Java 逐行读取文件内容的各种方法, 并且简单地比对了一下执行效率. 在此记录, 希望能够帮到有需要 ...

  4. python读取文件一行-Python逐行读取文件内容

    一行一行得从文件读数据,显然比较慢:不过很省内存 带缓存的文件读取 readlines 速度最快 1. 最基本的读文件方法: ? # File: readline-example-1.py file ...

  5. java 读取txt乱码_java 逐行读取txt文本如何解决中文乱码

    java读取txt文本中如含有中文,可能会出现乱码,解决方案是: 1.要统一编码,java工程的编码,txt文本编码,java工程中的java文本编码都统一为utf-8: 2.利用 InputStre ...

  6. java逐行读取文件_Java逐行读取文件

    java逐行读取文件 Today we will look into different java read file line by line methods. Sometimes we have ...

  7. 逐行读文件_用python比较两个文件的内容是否相同

    有两个文件,考虑编写算法,尽可能快的比较这两个文件的内容是否相同.看起来这是一个非常简单的事情,但仔细思考就会发现,有很多可以琢磨的地方.我在学习filecmp模块的cmp方法时,阅读它的源码,感慨于 ...

  8. Linux shell逐行读取文件的方法-比较

    From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2387.html 在linux中有很多方法逐行读取一个文件的方法,其中 ...

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

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

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

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

最新文章

  1. JGG:COVID-19感染导致儿童上呼吸道和肠道菌群持续失衡
  2. [Luogu 1196] NOI2002 银河英雄传说
  3. 【汇编语言】理解8086CPU中,不同类型的寄存器和汇编指令规则的联系(会继续更新)
  4. 机器学习常用模型:决策树_fairmodels:让我们与有偏见的机器学习模型作斗争
  5. 附录-SpringFactoriesLoader
  6. (转)高盛将“穷人”理财交给机器人,那智能投顾在中国怎么玩?
  7. VS2013/VS2017 Visual Assist X安装及破解
  8. spwm波正弦表生成程序,亲测实用有效!!!!!!速度摘取
  9. 如何免费CAJ完整转换成Word
  10. matlab中uigetfile函数使用方法 (选择文件提示框)
  11. 威纶通触摸屏MT6071IP如何使用宏指令编程设置密码登陆界面进行用户操作权限管理
  12. 台式机计算机里所有文档都打不开,电脑里的所有word文档都打不开,如何处理掉?...
  13. 深入理解计算机系统(第三版)家庭作业 第九章
  14. 免费CMS插件文章采集伪原创发布插件
  15. 采用Eclipse为IDE,设计一个Java程序,实现根据指定年份、月份计算该月天数的功能,即程序输入为年、月,输出为该月的天数。
  16. poj 1061青蛙的约会
  17. 新华三交换机密码重置
  18. GoogleEarth二次开发平台指南(1) ---如何将谷歌地球嵌入到自定义的窗体中
  19. 编译原理复习(4)语法分析--自上而下分析
  20. Matlab的title如何实现换行显示?

热门文章

  1. Repeater控件使用小结持续更新
  2. 子集和的目标值(codevs 1692)
  3. 《Linux内核分析》实验一
  4. Android开源项目SlidingMenu本学习笔记(两)
  5. XmlHttp学习笔记
  6. 实时数据库领域中有关数据压缩的认识误区
  7. 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
  8. cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题
  9. Windows下命令行Git无法显示中文问题解决方案
  10. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常