本文发布于Cylon的收藏册,转载请著名原文链接~

AWK运算符

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

内置变量

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

特殊模式

- -
BEGIN awk 将在读取任何输入行之前立即执行BEGIN 中指定的动作
END awk 将在它正式退出前执行 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}'

1
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}'`
1
2
3
[ 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    

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2021/06/awesome-awk-command/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。