awk可以打印没有图案的行吗?
awk能否打印与其中一种图案不匹配的所有线条awk可以打印没有图案的行吗?,awk,Awk,awk能否打印与其中一种图案不匹配的所有线条 换句话说,我想变换一些线,但保留其余的不变。因此,如果a/pattern/matched,我将提供一个自定义块来打印该行。我只需要提供一个默认匹配器(如else)来打印其他行。是的,只需使用任何非零数字,awk将执行其默认操作,即打印行: awk '7' file 如果你想把它作为一个“else”,把“next”放在你为特殊处理选择的任何行之后,这样就不会对它们执行这一行了 awk '/pattern/{special processing; ne
换句话说,我想变换一些线,但保留其余的不变。因此,如果a/pattern/matched,我将提供一个自定义块来打印该行。我只需要提供一个默认匹配器(如else)来打印其他行。是的,只需使用任何非零数字,awk将执行其默认操作,即打印行:
awk '7' file
如果你想把它作为一个“else”,把“next”放在你为特殊处理选择的任何行之后,这样就不会对它们执行这一行了
awk '/pattern/{special processing; next} 7' file
你可以做:
awk '/pattern/ {do something with line} 1' file
此处,1
将打印所有行,包括已更改行和未更改行
仅显示使用
else if发布的解决方案Askan
awk '{
if (/pattern/)
print "Line number:",NR,"pattern matched"
else if (/Second/)
print "Line number:",NR,"Second matched"
else
print "Line number:",NR,"Another line matched"
}' file
您可以取消模式以获得类似于else
的行为:
awk '
/pattern/ {
# custom block to print the line
}
!/pattern/ {
# else do other things
}
'
例如,如果您使用的是gawk
,则可以使用switch
awk '{switch ($0) {
case /pattern/:
print "Line number:",NR,"pattern matched"
break
case /Second/:
print "Line number:",NR,"Second matched"
break
default:
print "Line number:",NR,"Another line matched"
}}' input.txt
input.txt
This line matches the pattern
Second line does not match
Hello
This line also matches the pattern
Another line
输出:
Line number: 1 pattern matched
Line number: 2 Second matched
Line number: 3 Another line matched
Line number: 4 pattern matched
Line number: 5 Another line matched
您还可以通过删除案例之间的break
来对案例进行分组 你最好举个例子,说说你喜欢什么。有了600分的声誉,你应该知道这有多重要。你通常不会这么做。如果将next
放入已找到的块中,则另一个块将是未找到的块awk'/pattern/{执行此操作;下一步}{否则将运行此块}'
。在您的示例中,两个测试都将始终运行,并且可能会使程序速度减慢一些。这/模式/
表单在这样的情况下非常方便:awk'/^IpExt/&&/Mcast/{print$4}'/proc/net/netstat
。换句话说,它会找到一条与某个模式匹配的线,但会排除与另一个模式匹配的线。我几乎没有看到任何人使用这里或其他地方使用的开关函数。大多数人倾向于使用if-else-if-else
。我更新了我的帖子。我从来都不知道这个功能的存在(我完全承担了从未完全阅读GNU文档的责任)+1用于共享。@JS웃 我见过它,但和我在帖子中添加的解决方案相比,它很少被使用。我发布的内容将是可移植的,不仅是gnu awk,你最好在看到答案之前编辑并更新它7
是一个注册商标。让我们希望他将模仿他精湛的风格视为恭维……:-)
echo -n "one\ntwo\nthree\nfour" |
awk '{a=1} /one/ {print 1;a=0} /three/ {print 3;a=0} a'
1
two
3
four