shell脚本之AWK-AWK的模式

AWK的模式

语法:awk [-F] 'pattern {action}' input_filename1 input_filename2 ……

对上述代码进行解释:

  • (1)-F为字段分隔符。若不指定,awk默认使用空格作为分隔符。
  • (2)/pattern/和/action/需要使用单引号引起来,防止shell做解释。
  • (3)/pattern/是可选项,如果不指定awk将处理输入文件中的所有记录,如果指定一个模式,awk则只处理匹配到的模式的记录。
  • (4){action}为awk的命令,可以是单个命令,也可以是多个命令,整个action(包括里面的所有命令)都必须放在{ }之间。
  • (5)input_filename表示要处理的文件。
  • (6)action必须被{ }包裹,没有被包裹的就是pattern,awk可以接受许多不同形态的pattern,一般常用“关系表达式”来当成pattern,awk通过判断pattern的值来决定是否执行其后所对应的action。

1.常见的模式类型

  • (1)regexp:正则表达式,格式为/regular expression/。
  • (2)expression:表达式,其值非0或非空字符时满足条件,如:$1 ~ /foo/ 或 $1 == “uplook”,用运算符~ (匹配)和 !~(不匹配)。
  • (3)ranges:指定的匹配范围,格式为pat1,pat2。
  • (4)BEGIN/END:特殊模式,仅在awk命令执行前运行一次货结束前运行一次。
  • (5)Empty(空模式):匹配任意输入行
    2.常见的action
  • 1.expressions
  • 2.control statements
  • 3.compound satements
  • 4.input statements
  • 5.output satements
    • 2.1 /正则表达式/:使用通配符的扩展集。
      • +:匹配其前的单个字符一次以上,是awk自有的元字符,不适用于grep和sed等
      • ?:匹配其前的单个字符1次或0次,是awk自有的元字符,不适用于grep和sed等
    • 2.2关系表达式
  • 可以是运算表达式,可以是字符串或数字的比较,如$2>$1选择一个第二个字段比第一个字段长的行。
    • 2.3模式匹配表达式
  • BEGIN:让用户指定在第一条输入记录被处理之前所发生的的动作,通常在此设置全局变量,在处理文本之前开始执行对应的命令,执行完BEGIN命令之后,才会遍历对应文本中的数据。
  • END:让用户在最后一条输入记录被读取之后发生的动作,处理完END后,才会执行对应的命令。

用一些简单的案例解释awk模式:

  • 1.使用正则:
[root@bogon ~]# awk -F: '/^r/ {print $1,$3}' /etc/passwd
root 0
rngd 992
  • 2.使用BEGIN
[root@bogon ~]# awk -F: 'BEGIN {printf "%-15s %-3s %-15s\n","user","uid","shell"} $3==0,$7~"nologin" {printf "%-15s %-3s %-15s\n",$1,$3,$7}' /etc/passwd
user            uid shell          
root            0   /bin/bash      
bin             1   /sbin/nologin
  • 3.使用END
[root@bogon ~]# awk -F: 'BEGIN {printf "%-15s %-3s %-15s\n","user","uid","shell"} $3==0,$7~"nologin" {printf "%-15s %-3s %-15s\n",$1,$3,$7} END {print "------END------"}' /etc/passwd
user            uid shell          
root            0   /bin/bash      
bin             1   /sbin/nologin  
------END------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值