文档章节

Linux shell逐行读取文件的方法

wulei163
 wulei163
发布于 2013/12/30 16:24
字数 794
阅读 629
收藏 0
点赞 0
评论 0

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


方式执行效率最高。



© 著作权归作者所有

共有 人打赏支持
wulei163
粉丝 8
博文 48
码字总数 8231
作品 0
郑州
程序员
oracle 11.2.0.3 设置启动脚本使ORACLE自动启动

Linux下安装完后每次都得通过下面命令来启动对应的服务: 启动服务 dbstart 启动监视器 lsnrctl start 启动控制台 emctl start dbconsole 本文以Red Hat Enterprise Linux 6.4 (x86_64)+oracl...

sfih ⋅ 2016/01/29 ⋅ 0

linux-crontab之环境变量的问题

  前言      在linux服务器上,计划任务基本都是crontab进行管理的。但是有些脚本手动运行都很正常,一放到crontab里面就不执行了。这一般都是环境变量的问题引起的。      环境变...

linux运维菜 ⋅ 06/02 ⋅ 0

shell读取文件的每一行

shell读取文件的每一行 写法一: ---------------------------------------------------------------------------- #!/bin/bash while read line do echo $line done < filename(待读取的文件......

马三木 ⋅ 2014/03/08 ⋅ 2

shell:读取文件的每一行内容并输出

本文原创于:http://www.cnblogs.com/iloveyoucc/archive/2012/07/10/2585529.html shell:读取文件的每一行内容并输出 写法一: --------------------------------------------------------......

love8023icando ⋅ 2016/09/06 ⋅ 0

在Linux上通过可写文件获取root权限的多种方式

  在Linux中,一切都可以看做文件,包括所有允许/禁止读写执行权限的目录和设备。当管理员为任何文件设置权限时,都应清楚并合理为每个Linux用户分配应有的读写执行权限。在本文中我将为大...

FreeBuf ⋅ 前天 ⋅ 0

嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院 ⋅ 04/10 ⋅ 0

linux下命令执行结果作为其他命令输入参数

通过ps命令获取对应程序的pid 比如这里要获取redis-server这个进程的pid [plain] view plain copy # ps -ef | grep redis-server root 60415 1 93 Feb17 ? 8-04:12:36 redis-server *:6379 r......

Michaelyn ⋅ 01/13 ⋅ 0

/etc/security/limits.conf的相关说明

/etc/security/limits.conf的相关说明 通过ulimit -n命令可以查看Linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统...

linjin200 ⋅ 04/29 ⋅ 0

[84题]Linux运维常见笔试题(填空题)

[84题]Linux运维常见笔试题(填空题) 1. 在Linux 系统 中,以文件方式访问设备 。 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 。 3. Linux 文件系统中每个文件用indoe节...

代金券优惠 ⋅ 05/23 ⋅ 0

使用 GNU Parallel 提高 Linux 命令行执行效率

将您的计算机变成一个多任务的动力室。 你是否有过这种感觉,你的主机运行速度没有预期的那么快?我也曾经有过这种感觉,直到我发现了 GNU Parallel。 GNU Parallel 是一个 shell 工具,可以...

06% ⋅ 06/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

UI ,前端框架选型

Flat-UI

miaojiangmin ⋅ 6分钟前 ⋅ 0

Istio Service Mesh 教程

Istio Service Mesh 教程 作者 宋净超 | 5400字 | 阅读大约需要11分钟 | 归档于istio | 发表于 2018-05-22 标签 #Istio #教程,来自 https://servicemesher.github.io/blog/istio-service-m...

openthings ⋅ 11分钟前 ⋅ 0

scala swing

scala swing组件的库 https://github.com/scala/scala-swing scala swing的API文档 https://www.scala-lang.org/api/2.9.1/scala/swing/package.html...

whoisliang ⋅ 16分钟前 ⋅ 0

CentOS安装配置Nginx

安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl-devel //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-deve......

临江仙卜算子 ⋅ 22分钟前 ⋅ 0

开源 java CMS - FreeCMS2.8 依申请公开

项目地址:http://www.freeteam.cn/ 依申请公开 1. 转交申请公开 用户可以把申请公开转交给其他人办理,系统会记录此申请公开的转交记录。 注意:同时只能转交一个申请公开。 选择需要转交的...

freeteam ⋅ 26分钟前 ⋅ 0

以太坊 web3.py 签名转账

以太坊 web3.py 签名转账 本文节选自电子书《Netkiller Blockchain 手札》 Netkiller Blockchain 手札 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86...

netkiller- ⋅ 32分钟前 ⋅ 0

年薪40W的程序员必会的技术有哪些?

很多人在问我,程序员如何拿高薪,如何做到年薪40W+,其实总结出来还是一句话,你的技术决定你的能力已经薪资。 那么什么样的技术人才才能拿到一份Java行业里面的高薪呢? 下面是我的一个总结...

码代码的小司机 ⋅ 32分钟前 ⋅ 0

jesque-spring使用及源码分析

1.使用 jesque结合spring使用,步骤如下: 1.1 在项目中添加maven依赖 <dependency> <groupId>net.lariverosc</groupId> <artifactId>jesque-spring</artifactId> <version>1.0.0</ve......

Funcy1122 ⋅ 34分钟前 ⋅ 0

OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《29》- 未完成乐队 《29》- 未完成乐队 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :#看球提醒# 02:00 巴西v...

小小编辑 ⋅ 今天 ⋅ 16

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部