awk 多个分隔符

1
2
echo "abcdefg" | awk -F '[ce]' '{print $1,$2,$3}'
ab d fg

但是我想要提取dmesg里面的时间,想以[]来做分割,这个时候可以反写[]取个巧

1
dmesg | awk -F '[][]' '{print $2}'

打印某一列为特定值的行

1
awk '$8=="500"' nginx_access.log

awk 交换一个文件的两列

比如文件test.txt

1
2
3
4
a;b;c
d;e;f
1;2;3
4;5;6

方法1

1
awk -F ';' '{printf("%s;%s;%s\n",$3,$2,$1)}' test.txt

方法2

1
2
3
awk -F ';' '{temp = $3 ; $3 = $1; $1 = temp}1' OFS=';' test.txt

这里的1 和 {print}是一样的, OFS代表分隔符。

找出某一列是指定值的行

比如我想知道根目录的磁盘占用情况

1
2
3
4
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sdc ext4 251G 13G 226G 6% /
none tmpfs 3.9G 68K 3.9G 1% /mnt/wslg
none tmpfs 3.9G 4.0K 3.9G 1% /mnt/wsl
1
2
df -hT | awk '($NF=="/"){print $(NF - 1)}'
# $(NF - 1) 倒数第二列

输出结果为:

6%

awk多个条件判断

原始输出:

1
2
3
4
5
[root@qz_k8s_m1 data]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
idp-dks-7b47f8cccb-cwdfw 1/1 Running 0 3h28m
idp-kts-6c5bbd4f49-ns74j 0/1 Running 92 6h55m
idp-kts-7c78fbdf68-cg28l 1/1 Running 0 8d
1
2
3
4
5
6
7
# 找出其中未就绪且重启次数大于10次的pod
[root@qz_k8s_m1 data]# kubectl get pod -n dev | awk '($2=="0/1" && $4>10)'
idp-kts-6c5bbd4f49-ns74j 0/1 Running 93 6h57m

# 可以只打印pod名字
[root@qz_k8s_m1 data]# kubectl get pod -n dev | awk '($2=="0/1" && $4>20) {print $1}'
idp-kts-6c5bbd4f49-ns74j