如何通过awk排除列中与正则表达式模式匹配的行?
我想排除包含特定字符串的行如何通过awk排除列中与正则表达式模式匹配的行?,awk,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 您需要将regex测试作为条件提供,而不是作为操作提供,并
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
您需要将regex测试作为条件提供,而不是作为操作提供,并且可以使用
awk -F: 'FNR>1 && !/none/{print $1}' file
awk -F: 'FNR>1 && $2 !~ /none/{print $1}' file
见
详细信息
-将字段分隔符设置为冒号-F:
-如果当前文件的已处理记录数大于1,且行上没有FNR>1&&/none/
(如果使用none
,如果字段2不包含$2!~/none/
模式,则返回true)none
-打印字段1值{print$1}
awk-F:'NR>1&&/无/{print$1}'文件
或awk-F:'NR>1&&2!~/无/{print$1}文件
@WiktorStribiżew运行良好!更接近您试图做的事情(但不比您选择的正确答案好):首先,列出了两个独立的操作。不管第一个做什么,第二个都会被执行。你的第一个“行动”根本不是一个行动。你想做的是一个if
语句,但你没有把它写成if
语句。你可以这样做;但通常的方法是Wiktor告诉你的。