假设我有几种行格式:
this:foo ...
that: foo ...
我想为一种形式或另一种形式运行两个不同的例程:
cat text_file \
| awk -F ':' '/:foo/ { # do this } # else print the whole line unchanged'
| awk -F ':' '/ +foo +/ { # do that } # else print the whole line unchanged'
理想情况下,我可以写:
cat text_file \
| awk -F ':' '
/:foo/ { ... }
/ +foo +/ { ... }
...
/.*/ { print }
'
但事情的发展似乎与我的预期有很大不同。有什么特殊的方法可以做到这一点吗?
答案1
你可以做:
awk '
/:foo/ { print "do-things"; next }
/[[:blank:]]+foo[[:blank:]]+/ { print "do-some-other-things"; next }
{ print "do-else" }
' infile
注意next
我们使用的语句;也就是说,如果给定块的条件为真,则跳到运行其余代码;如果上述两个块条件都不满足,则将执行最后一个块。
答案2
我想你想要:
awk -F: '
$2 ~ /^[[:blank:]]/ {
print "2nd field start with space"
}
$2 == "" || $2 ~ /^[^[:blank:]]/ {
print "2nd field does not start with space"
}
{ print }
' text_file