首页 > 解决方案 > 如何通过awk排除与列中正则表达式模式匹配的行?

问题描述

我想排除包含特定字符串的行。

header
1:test
2:test
3:none
4:test

为什么这些命令不起作用?

awk -F: 'FNR>1 {$0 !~ /none/} {print $1}' 1.txt
awk -F: 'FNR>1 {$2 !~ /none/} {print $1}' 1.txt

但这有效:

awk '$0 !~ /none/ {print $0}' 1.txt

我打算得到

1
2
4

标签: awk

解决方案


您需要提供正则表达式测试作为条件,而不是作为操作,并且可以使用

awk -F: 'FNR>1 && !/none/{print $1}' file
awk -F: 'FNR>1 && $2 !~ /none/{print $1}' file

查看awk 在线演示

细节

  • -F:- 将字段分隔符设置为冒号
  • FNR>1 && !/none/- 如果当前文件的已处理记录数超过 1 并且none行中没有(如果$2 !~ /none/使用,如果字段 2 不包含none模式,则返回 true)
  • {print $1}- 打印字段 1 值。

推荐阅读