awk的学习笔记

awk编程能力强大,文本处理能力突出。
首先,来看使用awk的一个例子:
比如,列出最常用的五个历史命令:
结合其他命令,我们给出结果:
awk ‘{print $1}’ ~/.bash_history | sort | uniq -c | sort -rn | head -n 5
从这个例子可以看出,awk确实神奇,好用。是得好好学习一番了。awk要学习以下要点:

首先准备一个材料,xinxi.txt
awk的学习笔记_第1张图片
(1)print命令
print打印指定部分
例如:
awk '{print $0}‘ xinxi.txt
#打印xinxi.txt
awk的学习笔记_第2张图片
print命令也可以用来打印匹配的某一行,比如:awk ‘/dmy/ {print}’ xinxi.txt 等同于awk ‘/dmy/’ xinxi.txt
awk02
print更强大的是可以打印需要的某几列,比如要打印name和score,就应该这样:
awk ‘{print $1,$6}’ xinxi.txt
awk的学习笔记_第3张图片
(2)分隔符
默认分隔符是空格,如果需要改变,就要用-F指定,比如要打印/etc/passwd的所有用户,awk -F":" ‘{print $1}’ /etc/passwd ,比较特殊的是,awk以双引号为分隔符时候,这样写:
awk -F ’ " ’ ‘{print $2}’ access.log
awk的学习笔记_第4张图片
(3)NF参数表示每行有几个字段
比如,awk ‘{print NF}’ xinxi.txt ,可以查看xinxi.txt每行有7个字段
awk05
使用 awk -F: ‘NF==5 {print }’ xinxi.txt 显示只有5个字段的行
没有打印结果,这是因为xinxi.txt字段都是7

(4)NR参数表示行号,比如,要打印xinxi.txt所有行,每行前面加行号,就应该这样写:
awk ‘{print NR,$0}’ xinxi.txt
awk06
再举个例子,要同时打印xinxi.txt的第3行和第4行,就要这样写:
awk ‘NR3||NR4 {print}’ xinxi.txt
awk07
(5)取某个列中的最大值
比如,要取xinxi.txt中height的最大值,可以这样写:
awk ‘BEGIN {max=0} {if ($4+0>max+0) {max=$4;couter=$0}} END {print couter}’ xinxi.txt
awk08
(6)求某一列的总和和平均值
求总和,比如第六列score的总和,可以这样写:awk ‘{sum+=$6} END {print “sum=”,sum}’ xinxi.txt
awk09
要求平均值,只需要总和初以行数,sum/(NR-1)就可以
awk ‘{sum+=KaTeX parse error: Expected 'EOF', got '}' at position 2: 6}̲ END {print "av…i}}’
awk的学习笔记_第5张图片
(8)awk在运维工作中的使用例子
a.查看机器的ip列表
ifconfig -a | awk ‘/Bcast/ {print $2}’|awk -F: ‘{print $2}’
awk11
(b)统计所有状态码为 404 的请求
awk ‘($9~/404/) {print $9,$7}’ access.log | sort | uniq
awk13
感悟:awk知识点太多,太强大,今天先学习到这里,后面继续!

你可能感兴趣的:(linux常用命令,awk,linux)