====== - 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