Linux中awk命令的使用

awk命令语法

awk 参数 '{要执行的操作}' filename
参数 含义
-F 分割字符串

要执行的操作里面可以使用if, for, 正则表达式
awk内置变量

变量 含义
NR 当前行号
NF 当前行分隔出了多少列

示例

普通打印

awk -F ',' '{print $1}' debug.log

-F ‘,’ 表示每一行用逗号分隔
‘{print $1}’ 表示打印出每行的第一列

带格式的打印

awk -F ',' '{printf("%s\n", $1)}' debug.log

%s 表示字符串占位符
\n 表示换行(如果没有\n的话printf不会自动换行,只有print才会自动换行)

正则表达式打印

假设有这样一个日志文件

2020-06-11 08:00:00.00 [Thread-1] User: {"id": "1", "name": "zhangsan", "sex": "1", "address": "add1"}
2020-06-11 08:00:02.00 [Thread-1] User: {"id": "2", "name": "lisi", "sex": "0", "address": "add1"}
需要取每一行的日期时间,线程号,name和sex属性的值,也就是:
2020-06-11 08:00:00.00	[Thread-1]	zhangsan	1
2020-06-11 08:00:02.00	[Thread-1]	lisi		0

思路

使用NF得到分隔出了多少列,再用for循环遍历各个列,用if+正则表达式判断是不是要取的列

awk -F ':' '{printf("%s:%s:%s", $1, $2, $3)for (i = 4; i <= NF; i++) {if ($i ~/name/ || $i ~/sex/)printf("%s", $(i+1)}printf("\n")}'

你可能感兴趣的:(Linux)