利用Linux Awk技巧,简单高效地提取数字 (linux awk 提取数字)

在日常的数据处理中,经常需要从文本中提取数字,并对其进行统计、计算等操作。但是,文本文件中的数字往往夹杂着大量无用的字符,如字母、符号等,而手动处理这些数字不仅繁琐而且易出错。那么,如何呢?

一、初识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=ms)`,因此制定匹配模式为`/(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命令具有灵活高效的文本处理能力,值得我们在日常工作中多加应用和深入学习。

相关问题拓展阅读:

如何在Linux中使用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

‘{print

$1

“\t”

$3}’

大于

=

大于或等于

小于或等于

==

等于

!=

不等于

范例:

cat

/etc/passwd

|

awk

‘{FS=”:”}

$3

{print

$1

“\t”

$3}’

文件/etc/passwd是以”:”分隔的,查看第三栏小于10的数据,并且只显示帐号与第三栏

关于linux awk 提取数字的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 利用Linux Awk技巧,简单高效地提取数字 (linux awk 提取数字)