Linux命令--awk

目录

一、简介

二、主要参数

三、awk中字符的含义

四、格式化输出


一、简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理。 awk是行处理器,相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

二、主要参数

awk   参数       ' BEGIN{}  //  {action1;action2}    END{}  '    文件名

-F   指定分隔符
-f    调用脚本
-v   定义变量
Begin{}    初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
//            匹配代码块,可以是字符串或正则表达式
{}            命令代码块,包含一条或多条命令,多条命令用 ;  隔开
END{}      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

三、awk中字符的含义

  • $0           表示整个当前行
    $1           每行第一个字段
    NF          字段数量变量
    NR          每行的记录号,多文件记录递增
    FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
    \t            制表符
    \n           换行符
    FS          BEGIN时定义分隔符
    RS         输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
    ~            包含
    !~           不包含
    ==         等于,必须全部相等,精确比较
    !=           不等于,精确比较
    &&         逻辑与
    ||             逻辑或
    +            匹配时表示1个或1个以上
    /[0-9][0-9]+/     两个或两个以上数字
    /[0-9][0-9]*/     一个或一个以上数字
    OFS         输出字段分隔符, 默认也是空格,可以改为其他的
    ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
    -F  [:#/]    定义了三个分隔符

    四、格式化输出

awk  '{printf  "%-5s %.2d",$1,$2}'  test

printf 表示格式输出
%格式化输出分隔符
-5表示长度为5个字符
s表示字符串类型,d表示小数

分割连续多个空格符
`awk`默认会将连续的空格符视为一个分隔符,而不是多个分隔符。 可以尝试使用正则表达式作为分隔符,例如:

awk -F '[[:space:]]+' '{print $1}' file.txt

按制表符进行分割

awk -F'\t' '{print $1,$2,$3}' file.txt

如果某个列变量条件满足,输出整行数据 

 awk -F '\t' '{if($25 == 1) print}' prep_a_train_data.txt | less

提取每行日志的耗时时间,满足时间条件的,输出整行数据

#日志内容格式,例如:cost 2ms: com
cat log |awk '{sub(/ms:/,"",$2); if(int($2)>20)print}' | less 

 当数字大于1000时,会存在英文逗号的情况,需要进行删除,才能匹配判断

grep 'TIME COST STATISTICS' *.log | awk '{sub(/ms,/,"",$13);sub(/\[/,"", $13);sub(/,/,"",$13); if(int($13)>1000)print}' |grep 'uri' | less

变量匹配字符串前缀

cat *.log | awk '{if($12 ~ "^5") print}'

变量匹配 字符串中间内容

cat *.log | awk '{if($12 ~ /50/) print}'

匹配特定httpStatus(50前缀,可包含501,502,503,504,505等等),来输出nginx日志

awk -F '\t' '{if (match($11, /50/)) print}' 2024-06-23_https.test.com.log | less


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值