Linux中逐行读取文件的方法

  Linux中逐行读取文件的方法            

在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

执行脚本后: [r[email protected] 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

方式执行效率最高。

时间: 2024-10-13 23:53:42

Linux中逐行读取文件的方法的相关文章

Linux shell逐行读取文件的方法

Linux shell逐行读取文件的方法 在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. 方法1:while循环中执行效率最高,最常用的方法. function while_read_LINE_bottm(){ While read LINE doecho $LINEdone  < $FILENAME}         注释:我习惯把这种方式叫

linux shell 逐行读取文件行

读取文件行 for 命令替换 代码块重定向 while 管道符 代码块重定向 for IFS=$'\n' for line in `ls -l` do (( count++ )) done echo $count 注意: for读取时,自动按空格作为间隔符.因此需要将IFS定义为按换行符分隔 ls -l > forout.log maxlength=$(wc -l < forout.log) for i in `seq $maxlength` do (( count++ )) done <

在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)

因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客户端软件,例如filezilla,使用服务器IP和root及密码,连接时一定要使用SFTP方式连接,这样才能连接到linux.注意,这种方法是不安全的,但我们这里没有ftp,如果要上传本地文件到服务器,没有更好更快的方法. 我们把database.sql上传到/tmp目录. 连接到linux,登录m

python 逐行读取文件的几种方法

Python四种逐行读取文件内容的方法 下面四种Python逐行读取文件内容的方法, 分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修改即可. 方法一:readline函数 # -*- coding: UTF-8 -*- f = open("/pythontab/code.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 while line: # pri

C#中winform使用相对路径读取文件的方法

这篇文章主要介绍了C#中winform使用相对路径读取文件的方法,实例分析了C#使用相对路径读取文件的技巧与实际应用,需要的朋友可以参考下 本文实例讲述了C#中winform使用相对路径读取文件的方法.分享给大家供大家参考.具体分析如下: 目录结构如下图所示:   方法一:由于生成的exe文件在bin\debug目录下,可以使用向上查找目录的方式获取要读取的xml文件 复制代码代码如下: string haarXmlPath = @"../../haarcascade_frontalface_a

Java逐行读取文件有多少种方法?

如果每个线程使用的变量都是其它线程不会读取或修改的,那么就不存在一致性问题.同样,如果变量是只读的,多个线程同时读取该变量也不会有一致性问题.否则,将会出现不一致性问题.为了解决数据不一致问题,必须引入某些机制使线程间同步. 当变量修改时间多于一个存储器访问周期,同时读.写操作又相互交替时,潜在的不一致性就会出现.如下图所示: 此时,线程B读取到的数据是错误的.使用一把锁能够解决上述问题: 下面介绍线程的三种同步机制: 1.互斥量pthread_mutex_t 互斥量就是锁,对某段临界区进行加锁

linux中快速清空文件内容的几种方法

这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > filename $ echo > filename $ cat /dev/null > filename 原文地址:https://www.cnblogs.com/lxwphp/p/9565572.html

linux中手动释放缓存的方法

linux中手动释放缓存的方法  Linux释放内存的相关知识介绍: 在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空 间影响性能,例如当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.,此时就需 要执行释放内存(清理缓存)的操作了. Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的

Linux中的gpio口使用方法

Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h> 判断一个IO是否合法:int gpio_is_valid(int number); 设置GPIO的方向,如果是输出同时设置电平:/* set as input or output, returning 0 or negative errno */int gpio_direction_input(unsi