linux 读取文件行?shell脚本读取文件每一行
大家好,今天来为大家分享linux 读取文件行的一些知识点,和shell脚本读取文件每一行的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
如何用Shell逐行读取文件
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查看文件行数linux查找行
linux查找一个中文件是否有该字符串?
。含有某个字符串Linux查找文件内容的常用命令方法从文件内容查找匹配指定字符串的行$grep"被查找的字符串"文件名从文件内容查找与正则表达式匹配的行$grep_e“正则表达式”文件名查找时不区分大小写:$grep_i"被查找的字符串"文件名查找匹配的行数:$grep-c"被查找的字符串"文件名从文件内容查找不匹配指定字符串的行$grep_v"被查找的字符串"文件名从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行find/-typef-name"*.log"|xargsgrep"ERROR"
查linux日志最后几行用什么参数啊?
用逆序显示命令tail查看即可。命令格式:tail命令说明:tail命令从指定点开始将File参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。Number变量指定将多少单元写入标准输出。Number变量的值可以是正的或负的整数。如果值的前面有+(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有-(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有+(加号)或-(减号),那么从文件末尾指定的单元号开始读取文件。示例:查看/var/log/boot.log,只显示最后100行。则执行tail-n100/var/log/boot.log或者tail-100/var/log/boot.log
linux如何查找某个目标字符串在文件的哪一行?
使用grep-n"xxx"file,其中xxx为要查找的字符串,file为文件名
linux如何查文件中第三行最大值?
Linux中查找文件中第三行的最大值,可以使用一条命令实现:
sed-n3pfilename|awk-vmax=0{for(n=2;n=NF;n++){if(max$n)max=$n;};printmax}
这里面sed-n3pfilename先取出来了文件中第三行的内容。
awk是去取第三行中每列的最大值,最后结果合并就可以满足需求啦。
linux怎么查看有效的行?
一,方法1nlfile-name|sed-n5p查看第五行二,方法2head-nfile_name|tail-1查看第n行三,方法3.输出一个文件的第4行sed-n4pufileawkNR==4ufilehead-4file|tail-1四,方法42.输出文件的第3列(默认分隔符为tab,其他分隔符的处理可以参考awk,cut的man信息)
Linux如何通过命令查看日志文件的某几行
【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename| tail-n+3000| head-n 1000
【二】显示1000行到3000行
cat filename| head-n 3000| tail-n+1000
*注意两种方法的顺序
分解:
tail-n 1000:显示最后1000行
tail-n+1000:从1000行开始显示,显示1000行以后的
head-n 1000:显示前面1000行
【三】用sed命令
sed-n'5,10p' filename这样你就可以只查看文件的第5行到第10行。
Linux统计文件行数
语法:wc [选项]文件
说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
该命令各选项含义如下:
- c统计字节数。
- l统计行数。
- w统计字数。
这些选项可以组合使用。
输出列的顺序和数目不受选项的顺序和数目的影响。
总是按下述顺序显示并且每项最多一列。
行数、字数、字节数、文件名
如果命令行中没有文件名,则输出中不出现文件名。
例如:
$ wc- lcw file1 file2
4 33 file1
7 52 file2
11 11 85 total
举例分析:
1.统计demo目录下,js文件数量:
find demo/-name*.js|wc-l
2.统计demo目录下所有js文件代码行数:
find demo/-name*.js|xargs cat|wc-l或 wc-l `find./-name*.js`|tail-n1
3.统计demo目录下所有js文件代码行数,过滤了空行:
find/demo-name*.js|xargs cat|grep-v ^$|wc-l