首页 > 其他 > 详细

awk

时间:2020-03-04 22:53:48      阅读:64      评论:0      收藏:0      [点我收藏+]

1.awk语法格式

awk [options] ‘commands‘ filename
awk [options] -f awk-script-file filenames

BEGIN行处理前动作 {}行处理 END行处理后动作
BEGIN{print 1/2} {print "ok"} END{print "Over"}
如:
awk ‘BEGIN{print 1/2} {print "ok"} END{print "Over"; print "Over2"}‘ /etc/passwd

匹配
awk ‘pattern‘ filename
awk ‘/root/‘ /etc/passwd

处理动作
awk ‘{action}‘ filename
awk -F: ‘{print $1}‘ /etc/passwd

匹配+处理动作
awk ‘pattern {action}‘ filename
awk ‘BEGIN{FS=":"} /root/ {print $1,$3}‘ /etc/passwd

加判断语句
df | awk ‘/\boot/ {if ($2 < 300000) {print "1"} else {print "2"}}‘

 

2. awk的工作原理

awk将文件中的每一行作为输入,awk会将每一行赋给内部变量$0,以换行符结束

awk开始进行字段分解,每个字段存储在已编号的变量中,从$1开始【默认空格分割】

awk默认字段分隔符是由内部FS变量来确定,可以使用-F修改

awk行处理时使用了print函数打印分割后的字段

awk在打印后的字段加上空格,因为$1,$3之间有一个逗号,逗号被映射至OFS内部变量中,称为输出分隔符,OFS默认为空格

awk输出后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分割成字段并进行处理,该过程将持续到所有行处理完毕。

 

3.awk分隔符

指定分隔符,一个冒号为分隔符
awk -F ":" {print $1} tmp

指定多个分隔符,一个冒号或一个空格为分隔符
awk -F "[: ]" {print $2} tmp

一个或多个冒号,空格为分隔符
awk -F "[: ]+" {print $2} tmp
eg 取ip
ifconfig | awk -F "[ :]+" /\<inet\>/{print $4}

OFS 指定输出时,逗号映射的内容,默认为空格
awk -F ":+" ‘BEGIN{OFS="-----"}{print $1,$2,$3}‘ /etc/passwd

 

4. awk内置变量

一行多少个元素  NF
awk {print NF} tmp

awk {print $NF} tmp

awk {print $(NF-1)} tmp

 

NR 行号
awk {print NR} tmp

awk NR==1{print $0} tmp

awk NR!=1{print $0} tmp

awk ‘NR>=1&&NR<=5{print $0}‘ tmp

FNR 也是行号,当处理多个文件时,文件分开计数
awk ‘{print FNR}‘ tmp1 tmp2

 

5.模式匹配

正则
~符号表示匹配,后面加正则,正则内容使用‘/’包括
awk /^root/ tmp
awk $0 ~ /^root/ tmp

awk ‘$1~/^root/’ tmp

比较符
awk $1 == /bin/bash tmp
awk $1 < 10 tmp

条件表达式
awk {if ($1 < 1000) {print "1"} else {print "2"}} tmp

运算
awk $1*1000 > 2000 tmp
awk {print $1+100} tmp

逻辑运算
awk $1<100 && $2 >2000 tmp

 

6. if

awk {if ($1<100) {i++} else if ($2>200) {j++} else if ($3>100) {k++} else {n++}} END{print "i="i,"j="j,"k="k,"n="n}‘ tmp.log

 

7.while

awk BEGIN{i = 1; while(i<=10){print i; i++}}‘ tmp

 

8.for

awk -F: {for (i = 1; i< 10; i++) {print $0}} passwd

 

awk

原文:https://www.cnblogs.com/yangxinrui/p/12412005.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!