awk小结
发布时间:2020-12-13 23:45:43 所属栏目:Linux 来源:网络整理
导读:awk工作原理介绍 awk实际是一种编程语言,我们使用的是的GUN版本,主要使用其强大的分割,过滤功能,awk实际也是对文件进行逐行处理awk工作状态分为以下三种GEGIN{} {} END{}行处理前 行处理中 行处理后 ++++++小示例++++++++awk ‘BEGIN{ print 1/2 } { prin
awk工作原理介绍
awk实际是一种编程语言,我们使用的是的GUN版本,主要使用其强大的分割,过滤功能,awk实际也是对文件进行逐行处理 awk工作状态分为以下三种 GEGIN{} {} END{} 行处理前 行处理中 行处理后 ++++++小示例++++++++ awk ‘BEGIN{ print 1/2 } { print "ok" } END{ print "------------------"}‘ /etc/passwd 即为行处理前打印一个1/2 行处理时输出ok 处理结束打印------ awk命令格式: awk ‘pattren‘ filename 示例:awk ‘/root/‘ passwd awk ‘{action}‘ filename 示例:awk -F ‘{ print $1 }‘ passwd awk ‘pattren {action}‘ filename 示例: awk -F ‘:‘ ‘/root/{ print $1}‘ / /中间的内容为正则表达式 又例如添加条件判断的 df | grep ‘/‘ | awk ‘$4>1000000{ print $6}‘ awk的内部变量 head -10 /etc/passwd > passwd #取/etc/passwd前10行举例 [[email?protected] ~]# awk ‘{print $0}‘ passwd #$0为全部参数,默认以回车为分隔符,所以原格式打印所有内容 [[email?protected] ~]# awk ‘{print NR}‘ passwd #total number record 所有行号,按顺序排列的 [[email?protected] ~]# awk ‘{print FNR}‘ passwd /etc/passwd #number record of file 多个文件的话,分别显示各自文件的行号 [[email?protected] ~]# awk -F":" ‘{print NF}‘ passwd #NF为指定冒号为分隔符,一行一共有多少字段 [[email?protected] ~]# awk -F":" ‘{print NF,$NF}‘ passwd #$NF为最后一个字段 [[email?protected] ~]# awk ‘BEGIN{FS=":"} {print $1}‘ passwd #FS为分隔符,默认以空格为分隔 [[email?protected] ~]# awk ‘BEGIN{FS=":";OFS="+++++"} {print $1,$2}‘ passwd #行处理前以冒号为分隔符,输出分隔符为+++++,打印第1第2个参数,第一与第二参数会以+++++相连,打印结果如下 root+++++x bin+++++x daemon+++++x adm+++++x lp+++++x [[email?protected] ~]# awk ‘BEGIN{RS=":"} {print $0}‘ passwd #原本以回车为默认换行输出分隔符,现在看到冒号则换行。打印效果如下 root x 0 0 root /root /bin/bash ....... [[email?protected] ~]# awk ‘BEGIN{FS=":";ORS="++++"} { print $1}‘ passwd #默认以回车输出排序,现在以++++作为输出排序。打印效果如下: root====bin====daemon====adm====lp====sync====shutdown====halt====mail====operator==== 格式化输出: print函数 # date + %F | awk -F":" ‘{ print "month: "$1 "nyear: "$2}‘ # awk -F":" ‘{ print "username: "$1 "tuid: "$3}‘ passwd #可以很清晰看出格式对不齐 printf函数 # awk -F":" ‘{ printf "%-15s %-10s %-15sn",$1,$2,$3}‘ passwd #定义了每个变量占用位置多少 # awk -F":" ‘{ printf "username: %-15s passx: %-10s uid: %-10s",$3}‘ passwd #可以在定义位置空间前面自由添加字符 %s 字符类型 %15s 右对齐占15字符 %d 数值类型 %15d 右对齐占15字符 -表示左对齐,默认右对齐 %-15s 意思为左对齐占15字符 n代表换行 t代表制表符(tab) awk模式和动作: 任何awk语句都由模式和动作组成。模式部分决定动作语句的合适触发及触发条件。处理即对数据进行的操作。 模式可以是:正则表达式 匹配记录(整行) # awk ‘/^root/‘ passwd # awk ‘$0 ~/^root/‘ passwd # awk ‘!/^root/‘ passwd # awk ‘$0 !~ /^root/‘ 匹配字段: 匹配操作符(~!~) # awk -F":" ‘$1 ~ /root/‘ passwd # awk -F":" ‘$NF !~ /bash$/‘ passwd 关系运算符 运算符 含义 示例 < 小于 $x<100 > 大于 $x>100 <= 小于等于 $y<=50 >= 大于等于 $y>=50 == 等于 x=y != 不等于 x!=y # awk -F":" ‘$3 == 0‘ passwd # awk -F":" ‘$3 < 10‘ passwd # awk -F":" ‘$7 == "/bin/bash"‘ passwd # awk -F":" ‘$1 == "alice"‘ passwd #这里的关系运算符,匹配字符需要加双引号,详细匹配内容 # awk -F":" ‘$1 ~ /root/‘ passwd # awk -F":" ‘$ !~ /root/‘ passwd # df | grep ‘/‘ | awk ‘$4>250000‘ 条件表达式 # awk -F":" ‘{ if($3 > 100) { print $1 } }‘ passwd awk是一门编程语言,用法很多,会在后面的一些脚本中详细的去使用。也不必深究,GUN版的,我们主要还是用到其强大的分割能力,有兴趣的可以深入了解~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |