awk小结

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行举例
[root@localhost ~]# awk '{print $0}' passwd       #$0为全部参数,默认以回车为分隔符,所以原格式打印所有内容
[root@localhost ~]# awk '{print NR}' passwd     #total number record 所有行号,按顺序排列的
[root@localhost ~]# awk '{print FNR}' passwd /etc/passwd    #number record of file 多个文件的话,分别显示各自文件的行号
[root@localhost ~]# awk -F":" '{print NF}' passwd        #NF为指定冒号为分隔符,一行一共有多少字段
[root@localhost ~]# awk -F":" '{print NF,$NF}' passwd   #$NF为最后一个字段
[root@localhost ~]# awk 'BEGIN{FS=":"} {print $1}' passwd   #FS为分隔符,默认以空格为分隔  
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="+++++"} {print $1,$2}' passwd  #行处理前以冒号为分隔符,输出分隔符为+++++,打印第1第2个参数,第一与第二参数会以+++++相连,打印结果如下
root+++++x
bin+++++x
daemon+++++x
adm+++++x
lp+++++x

[root@localhost ~]# awk 'BEGIN{RS=":"} {print $0}' passwd    #原本以回车为默认换行输出分隔符,现在看到冒号则换行。打印效果如下
root
x
0
0
root
/root
/bin/bash
.......
[root@localhost ~]# 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 %-15s\n",$1,$2,$3}' passwd   #定义了每个变量占用位置多少
# awk -F":" '{ printf "username: %-15s passx: %-10s uid: %-10s",$1,$2,$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版的,我们主要还是用到其强大的分割能力,有兴趣的可以深入了解~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值