awk
awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或者 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”,表示“与”, “||”表示“或”,“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别 表示加、减、乘、除、取余和乘方。
awk 包含几个特殊的内建变量(可直接用)
FS | 指定每行文本的字段分隔符,默认为空格或制表位(tab) |
---|---|
NF | 当前处理的行的字段个数 |
NR | 当前处理的行的行号 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第n个字段(第n列) |
FILENAME | 被处理的文件名 |
RS | 数据记录分隔,默认为\n.即每行为一条记录 |
用法示例
按行输出
[root@tangkun ~]#awk '{print}' /etc/passwd #输出passwd的所有内容
[root@tangkun ~]#awk '{print $0}' /etc/passwd #输出passwd的所有内容
[root@tangkun ~]#awk 'NR==1,NR==3{print}' /etc/passwd #输出passwd第1行到第3行的内容
[root@tangkun ~]#awk '(NR>=1)&&(NR<=3){print}' /etc/passwd #输出passwd第1行到第3行的内容
[root@tangkun ~]#awk 'NR==1||NR==3{print}' /etc/passwd #输出passwd第1行和第3行的内容
[root@tangkun ~]#awk '(NR%2)==1{print}' /etc/passwd #输出passwd奇数行的内容
[root@tangkun ~]#awk '(NR%2)==0{print}' /etc/passwd #输出passwd偶数行的内容
[root@tangkun ~]#awk '/^root/{print}' /etc/passwd #输出以root开头的行
[root@tangkun ~]#awk '/bash$/{print}' /etc/passwd #输出以bash结尾的行
按字段输出文本
[root@tangkun ~]#awk -F: '{print $1}' /etc/passwd #以:为分隔输出第一列
[root@tangkun ~]#awk -F: '{print $1" "$2}' /etc/passwd #以:为分隔输出第一列和第2列
[root@tangkun ~]#awk -F: '{print $1,$2}' /etc/passwd #以:为分隔输出第一列和第2列
[root@tangkun ~]#awk -F: '{print $1$NF}' /etc/passwd #以:为分隔输出第一列和第最后一列
[root@tangkun ~]#awk -F: '{print $1"\t"$NF}' /etc/passwd #输出第一列和第最后一列(以制表符分隔)
[root@tangkun ~]#awk -F[:/] '{print $9}' /etc/passwd #以:和/做分隔 输出第9段内容
[root@tangkun ~]#ifconfig ens33|awk 'NR==2{print}'|awk '{print"本机的IP地址为:"$2}'
本机的IP地址为:192.168.116.131
##筛选出来IP地址
[root@tangkun ~]#df -h|awk '{print$5}'|tr -d % #磁盘占有量,并删掉百分号