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])}'