Linux常用命令-awk

Linux常用命令-awk

awk linux强大的文本处理工具

基本语法

awk 是一个行处理器,它逐行读取输入,并按照指定的规则对每一行进行处理。

awk 'pattern { action }' filename
  • pattern: 匹配条件。如果没有指定,默认对每一行都执行 action。
  • action: 对匹配到的行执行的操作。如果没有指定,默认是打印匹配的行。
# 打印整个文件,等同于 cat 命令
awk '{ print }' filename

# 打印文件的第1列和第3列, $0 表示整行
awk '{ print $1, $3 }' filename

# NR    代表当前行号
# NF    当前行的字段数

# 指定分隔符, 默认情况下 awk 使用空格或制表符作为字段分隔符
awk -F',' '{ print $1, $3 }' filename.csv

# 打印第3列大于 100 的行
awk '$3 > 100' filename

# 打印包含 "error" 的行
awk '/error/' filename

# 当第3列大于100时,打印第1和第3个列字段的值
awk -F ',' '$3 > 100 { print $1, $3 }' filename.csv

# 计算第3列的总和
awk '{ sum += $3 } END { print sum }' filename

# 计算第三列的平均值
awk '{ sum += $3; count++ } END { print sum/count }' filename

# 打印长度超过 80 字符的行
awk 'length($0) > 80' filename

常用命令

# $NF 打印匹配行最后一位
cat filename | awk -F'|' '{print $NF}'

# 统计IP地址出现的次数
awk '{print $1}' access.log | awk '{print $1}' |sort | uniq -c | sort -n

# '~' 正则表达式匹配,第4个字段匹配到"info"
awk -F"|" '{if($4~/info/)print $5}' filename 

# 按行号NR匹配(匹配1-3行)
awk 'NR>=1&&NR<=3' filename
awk 'NR==1,NR==3' filename

# 按字符位置匹配
awk '/warn/,/error/' filename 

# 打印第2位为"info"的所有行
cat filename | awk -F'|' '{if($2=="info") print $0}'

# 打印第五位小于10的行
cat filename| awk -F'|' 'BEGIN{max=10;}{if($5+0<max+0)print $0}'

# 分类求和,统计 $4 值相同时对应 $5 值的总和
cat filename | awk -F'|' '{sum[$4]+=$5}END{for(i in sum)printf("%-10s %d\n",i,sum[i])}'
posted @ 2022-12-10 16:00  rustling  阅读(29)  评论(0编辑  收藏  举报