====== - awk语法速查 ======
https://zhuanlan.zhihu.com/p/186289624
https://gitcode.csdn.net/662623a8a2b05122556583c9.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTM0NTc3OCwiZXhwIjoxNzI5MTI2Mzc1LCJpYXQiOjE3Mjg1MjE1NzUsInVzZXJuYW1lIjoiemhhbmdndW8xMjg2In0.dkw7fVOu8LUxaRs877Qbdo3R6sAWimMy1tWJV9fCicA&spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-6-134817128-blog-140937874.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-6-134817128-blog-140937874.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=13
===== - 基本命令格式 =====
awk '{BEGIN{action} /pattern/ {action} END{action}}'
BEGIN{} : 最开始执行
// : 正则
{} : 循环体
END{} : 最后执行
action可以是print之类的
# 打印log文件的第2,4,6列
awk '{print $2, $4, $6}' log
# printf
awk '{printf("%d, %d, %d, $2, $4, $6")}' log
# 打印匹配到root的行
awk '/root/ {print $0}' log
# 只打印第一列数据<10的行
awk '$1 < 10 {print $0}' log
===== - 分隔符 =====
#将冒号和逗号也当作分隔符,打印log文件2,4,5列
awk -F ':|,' '{print $2, $4, $6}' log
===== - awk内置变量 =====
$1、$2 ... $n, 表示数据第0列
$0:表示当前整行,$1表示第一个字段,$2表示第二个字段,$n 表示第n个字段;
NR:表示当前已读的行数;
NF:表示当前行被分割的列数,NF表示最后一个字段,NF-1 表示倒数第二个字段;
FILENAME:表示当前文件的名称
# 打印行号+每行内容
awk '{print NR $0}' log
# 打印列数
awk '{print NF}' log
# 打印第一列
awk '{print $1}' log
# 打印最后一列
awk '{print $NF}' log