在日常的数据处理中,经常需要从文本中提取数字,并对其进行统计、计算等操作。但是,文本文件中的数字往往夹杂着大量无用的字符,如字母、符号等,而手动处理这些数字不仅繁琐而且易出错。那么,如何呢?
创新互联从2013年创立,先为抚松等服务建站,抚松等地企业,进行企业商务咨询服务。为抚松企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
一、初识Linux Awk命令
1.1 什么是Awk命令
Awk命令是在Unix和Linux常用的一个文本处理工具,可以将文本内容按照指定的规则进行匹配、查找、处理等操作。其基本语法如下:
“`awk ‘pattern { action }’ filename“`
其中,pattern表示匹配模式,action表示匹配成功后执行的操作,filename表示要处理的文件名。通常,Awk命令会自动读取标准输入,即键盘输入或文件输入。
1.2 Awk命令的基本功能
在使用Awk命令时,需要掌握一些基本的功能和概念:
– 分隔符:Awk命令默认的分隔符是空格和制表符,可以使用-F参数指定自定义分隔符;
– 字段:Awk命令将每一行文本按照分隔符分割成若干个字段,可以使用$1、$2等表示第1、2个字段;
– 模式匹配:可以使用正则表达式对文本进行模式匹配;
– 操作符:可以使用简单的四则运算等操作符对字段进行计算;
– 变量:Awk命令内置了一些变量,如NR表示当前行号,NF表示当前行的字段数等。
二、利用Awk命令提取数字
在使用Awk命令提取数字时,通常需要按照以下步骤进行:
2.1 根据需求制定匹配模式
根据要提取的数字的特征制定匹配模式。例如,要提取文本中的所有整数,可以使用正则表达式`/[0-9]+/`。
2.2 使用Awk命令进行匹配
然后,使用Awk命令进行匹配,找到符合模式的文本内容。例如,使用以下命令可以从名为input.txt的文件中找到所有整数:
“`awk ‘/[0-9]+/ { print $0 }’ input.txt“`
其中,`/[0-9]+/`表示匹配所有整数,`print $0`表示将匹配到的整行输出。
2.3 提取匹配结果中的数字
从匹配结果中提取数字。由于匹配结果包含了大量的其他字符,需要使用Awk命令的计算功能将数字提取出来。例如,使用以下命令将匹配结果中的数字相加:
“`awk ‘/[0-9]+/ { sum+=$0 } END { print “Total: “, sum }’ input.txt“`
其中,`sum+=$0`表示将匹配到的数字相加并赋值给变量sum,`END { print “Total: “, sum }`表示在处理完整个文件后输出变量sum的值。
三、实战案例:提取日志中的响应时间
下面通过一个实战案例来演示如何利用Awk命令提取日志中的响应时间。
假设有以下日志文件log.txt:
“`
2023-05-01 12:00:01 INFO: Request 1 – Start
2023-05-01 12:00:02 INFO: Request 1 – End (time=100ms)
2023-05-01 12:00:03 INFO: Request 2 – Start
2023-05-01 12:00:04 WARN: Request 3 – Timeout
2023-05-01 12:00:05 INFO: Request 2 – End (time=120ms)
2023-05-01 12:00:06 INFO: Request 3 – Start
2023-05-01 12:00:07 INFO: Request 3 – End (time=150ms)
“`
要求从中提取出所有响应时间,并计算平均响应时间。
步骤如下:
3.1 制定匹配模式
根据日志格式,响应时间的格式为`(time=xxxms)`,因此制定匹配模式为`/(time=[0-9]+ms)/`。
3.2 使用Awk命令进行匹配
使用以下命令匹配响应时间:
“`awk ‘/(time=[0-9]+ms)/ { print $0 }’ log.txt“`
其中,`/(time=[0-9]+ms)/`表示匹配响应时间,`print $0`表示将匹配到的整行输出。
3.3 提取匹配结果中的数字并计算
使用以下命令将匹配结果中的数字相加,并统计平均响应时间:
“`awk ‘/(time=[0-9]+ms)/ { sum+=$0; count++ } END { print “Total: “, sum; print “Average: “, sum/count }’ log.txt“`
其中,`sum+=$0`表示将匹配到的响应时间相加并赋值给变量sum,`count++`表示统计响应时间个数,`END { print “Total: “, sum; print “Average: “, sum/count }`表示在处理完整个文件后输出变量sum和平均值。
最终输出结果为:
“`
Total: 370ms
Average: 123.333ms
“`
四、
本文介绍了利用Linux Awk技巧进行数字提取的方法,主要包括制定匹配模式、使用Awk命令进行匹配、提取匹配结果中的数字三个步骤。同时,通过实战案例展示了如何从日志中提取响应时间,并计算平均响应时间。Awk命令具有灵活高效的文本处理能力,值得我们在日常工作中多加应用和深入学习。
相关问题拓展阅读:
awk实例
1、cat /etc/passwd|awk -F: ‘{print $1}’
2、linux的awk一般都是gawk,/bin/awk -> gawk
3、awk ‘/abc/’ file.txt 显示文件中包含abc行。类似grep abc a.txt
4、awk ‘{print NR,NF,$1,$NF,}’ file.txt按空格分隔列,显示当前记录号、域数和每一行的之一列和最后一列。
-F参数可以设置分割参数,例如按:分割
awk -F: ‘{print $1}’ /etc/passwd
或者cat file|awk -F “|” ‘{print $1}’
5、awk编程语言
cat v.txt|awk ‘{print length($1)}’
6、awk中使用NR和FNR,一般在awk处理多个文件时,NR==FNR才有意义
NF 当前记录中的字段数。
NR 当前型磨记录数。
FNR同NR,但相对于当前文件。
awk ‘{print NR,FNR}’ test.txt test2.txt
awk ‘{if(NR==FNR){a=$1;}else{print $1,a}}’ b.txt a.txt
7、打此租备印奇数行与偶数行
awk ‘NR%2’ test.txt
awk ‘!(NR%2)’ test.txt
8、杀死森毁tomcat的stop.sh脚本
#!/bin/sh
ps -ef| grep tomcat |grep -v grep | awk ‘{print $2}’ |xargs kill -9
9、打印前7列
cat a.txt|awk ‘{NF=7}1’ >> b.txt
tail -f access.log|awk ‘NF=7′ OFS=’\t’ >> b.txt
cut -d”,” -f3-6 urfile
awk:用于缓脊吵一行中分成数个“字段”来处理。适合处理
小型数据。
运行模式:awk
‘条件类型1{动作1}
条件类型2{动作2}
…’
filename
#
last
|
awk
$1
“\t”
$3}’
大于
=
大于或等于
小于或等于
==
等于
!=
不等于
范例:
cat
/etc/passwd
|
awk
‘{FS=”:”}
$3
$1
“\t”
$3}’
文件/etc/passwd是以”:”分隔的,查看第三栏小于10的数据,并且只显示帐号与第三栏
关于linux awk 提取数字的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
成都网站营销推广找创新互联,全国分站站群网站搭建更好做SEO营销。
创新互联(www.cdcxhl.com)四川成都IDC基础服务商,价格厚道。提供成都服务器托管租用、绵阳服务器租用托管、重庆服务器托管租用、贵阳服务器机房服务器托管租用。
分享标题:利用Linux Awk技巧,简单高效地提取数字 (linux awk 提取数字)
URL标题:http://www.shufengxianlan.com/qtweb/news36/256986.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联