下面是关于 AWK 过滤行的操作。
1. 过滤掉指定行
在 AWK 中,可以使用 NR
变量表示当前处理的行号。如果需要过滤掉某些指定行,只需要使用 NR
变量进行判断即可,例如,要过滤掉第一行和第三行,可以使用以下命令:
awk 'NR != 1 && NR != 3 {print}' filename
其中 filename
是需要处理的文件名。代码中的 {print}
表示输出符合条件的行。如果你想要在原文件中进行修改,可以使用 -i
参数:
awk -i 'NR != 1 && NR != 3 {print}' filename
这样可以直接修改原文件,而不是输出到终端。
2. 过滤掉前几行
如果需要过滤掉前几行,可以使用 NR
变量进行判断,例如,要过滤掉前六行,可以使用以下命令:
awk 'NR > 6 {print}' filename
其中 NR > 6
表示行号大于 6 的行都会被匹配。同样的,如果你想要在原文件中进行修改,可以使用 -i
参数:
awk -i 'NR > 6 {print}' filename
3. 过滤掉指定行区间
如果需要过滤掉指定的行区间,可以使用 NR
变量进行判断,例如,要过滤掉第 3 行到第 9 行,可以使用以下命令:
awk 'NR < 3 || NR > 9 {print}' filename
其中,||
表示或者的意思,NR < 3 || NR > 9
表示行号小于 3 或者大于 9 的行都会被匹配。
如果你想要在原文件中进行修改,可以使用 -i
参数:
awk -i 'NR < 3 || NR > 9 {print}' filename
这样可以直接修改原文件,而不是输出到终端。
3. 利用表达式匹配多种情况-过滤掉指定内容的行
如果你想要利用表达式匹配多种情况并过滤掉相关的行,可以使用正则表达式来实现。例如,要过滤掉以 example
或者 test
开头的行,可以使用以下命令:
awk '/^(example|test)/ {next} {print}' filename
其中 /^(example|test)/
表示匹配以 example
或者 test
开头的行,并使用 next
命令跳过这些行。这里的表达式可以自由组合,灵活运用可以实现更多的功能。
[root@localhost ~]# chronyc sources |awk '/^(M|=)/ {next} {print}'
^* 203.107.6.88 2 9 377 356 +1446us[+1961us] +/- 23ms
如果你想要在原文件中进行修改,可以使用 -i
参数:
awk -i '/^(example|test)/ {next} {print}' filename
这样可以直接修改原文件,而不是输出到终端。
实际应用:
1、过滤出命令的结果输出行号大于2的$2 $3
字段。
[root@localhost ~]# chronyc sources | awk 'NR >2 {print "NTP时间源 "$2" 的Stratum值是:"$3}'
NTP时间源 203.107.6.88 的Stratum值是:2
2、过滤出命令的结果输出行中包含 Stratum 的$3
字段。
[root@localhost ~]# chronyc tracking | awk '/Stratum/ {print "本机的Stratum值是:"$3}'
本机的Stratum值是:3