awk 常用集锦

AWK运算符

运算符说明
赋值运算符= += -= *= /= %= ^= **=
逻辑运算符
||逻辑或
&&逻辑与
正则运算符
~ !~匹配正则表达式和不匹配正则表达式
关系运算符
< <= > >= != ==关系运算符
算术运算符
+ -加,减
*** / &**乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ –增加或减少,作为前缀或后缀
其他运算符
$字段引用
空格字符串链接符
?:三目运算符
In数组中是否存在某键值

内置变量

变量名属性
$0当前记录
1 n当前记录的第 n 个字段
FS输入字段分隔符 默认是空格
RS输入记录分割符 默认为换行符
NF当前记录中的字段个数,就是有多少列
NR已经读出的记录数,就是行号,从 1 开始
OFS输出字段分隔符 默认也是空格
ORS输出的记录分隔符 默认为换行符

特殊模式

--
BEGINawk 将在读取任何输入行之前立即执行BEGIN 中指定的动作
ENDawk 将在它正式退出前执行 END中指定的动作
  • 去掉空白:awk 'NF' file

  • 统计行数: awk 'END{print NR}' file (END)

  • 偶数行:awk 'NR%2==0 {print $n}' file

  • 奇数行:awk 'a=!a' file

  • 指定分隔符: awk -F ":" '{print $1}' file

  • 使用正则: awk '/^tecmint.com/ { counter+=1 ; printf "%s\n", counter ; }' file

  • 打印多列:awk -F ":" '{print $1 $2 .. $(NF-1) $NF}' /etc/passwd

  • 多分隔符的用法:echo i am a protester,myqq is 1112222|awk -F '[, ]' '{print $4 " " $7}'

  • 多个分隔符使用正则:awk -F"/|=" '{print $3, $5, $NF}' file

  • 使用[]作为分隔符:awk -F '[][]' '{print $3;}' data (这里[ ] 分别占用两列 2个$)

  • 获取以 []内的值: awk -F '[][*:]' '{print $8}'

      echo "[Remote_ip:10.41.58.88] [Remote_user:-] [Querytime:12/Nov/2021:15:50:11 +0800] [Request_url:POST /zeusweb-1/index.php?r=task/ws&ws=1 HTTP/1.1] [Request_status:200] [Request_byte_B:1080] [Request_time_s:4.375] [Http_referer:-] [Http_agent:PHP-SOAP/5.4.25]"|awk -F '[][*:]' '{print $8}'
    

    也可以使用 awk -F '[][*:]' '{print $8}'

    [ Remote_ip:10.41.58.88 ] [ Remote_user: - ] [ Querytime : 12/Nov/2021:15:50:11 +0800 ]
    ^ ^^^^^^^^^ ^^^^^^^^^^^  ^  ^^^^^^^^^^^  ^  ^  ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^
    1  2        3      4   5        6  7  8        9                  10    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hermokrates

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值