当我应用此代码时:
gawk '{ if ($0 ~ /cat|dog/) {
print "animal" }
else if ($0 ~ /[[:digit:]]+/) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt
到这个输入:
100
cat
200
something
dog
我看到了所需的输出:
number
animal
number
unknown
animal
尼斯。但是当我使用这段代码时:
gawk 'BEGIN {animals = /cat|dog/;
digits = /[[:digit:]]+/ }
{ if ($0 ~ animals) {
print "animal" }
else if ($0 ~ digits) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt
我看到了这个输出:
animal
unknown
animal
unknown
unknown
发生了什么事?真的很奇怪,不可预测!
答案 0 :(得分:0)
你需要像这样存储和重用正则表达式:
gawk 'BEGIN {animals = "cat|dog"; digits = "[[:digit:]]+" }
{ if ($0 ~ animals) {
print "animal" }
else if ($0 ~ digits) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt
即。在将其存储在变量中时,不要使用正则表达式分隔符。