awk过滤掉指定的行

下面是关于 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容