目录

1. 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

1.1 基本命令格式

awk '{BEGIN{action} /pattern/ {action} END{action}}' <file>
   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

1.2 分隔符

#将冒号和逗号也当作分隔符,打印log文件2,4,5列
awk -F ':|,' '{print $2, $4, $6}' log

1.3 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