是否可以打印所有与其中一个模式不匹配的行?
换句话说,我想转换一些行,但保持其余不变。所以,如果/ pattern / matching我会提供一个自定义块来打印该行。我只需要提供一个默认的匹配器(就像其他的一样)来打印其他行。
答案 0 :(得分:6)
是的,只需使用任何非零数字,awk将执行默认操作,即打印该行:
awk '7' file
如果你想把它作为“其他”,在你为特殊处理选择的任何行之后加上“next”,这样就不会为它们执行。
awk '/pattern/{special processing; next} 7' file
答案 1 :(得分:3)
您可以否定模式以获得else
行为:
awk '
/pattern/ {
# custom block to print the line
}
!/pattern/ {
# else do other things
}
'
答案 2 :(得分:2)
你可以这样做:
awk '/pattern/ {do something with line} 1' file
此处1
将打印所有行,包括已更改的行和未更改的行。
仅显示使用Askan
else if
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
答案 3 :(得分:1)
如果您使用switch
gawk
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
来对案例进行分组。 more info
答案 4 :(得分:1)
echo -n "one\ntwo\nthree\nfour" |
awk '{a=1} /one/ {print 1;a=0} /three/ {print 3;a=0} a'
1
two
3
four