本文发布于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}'
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
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2021/06/awesome-awk-command/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。