我打算将一些字符匹配到一个单词的中间,在那里我检查单词的开头和结尾(它不能匹配第一个或最后一个字符,否则我的目标是无效的)。然后我检查它是否存在于使用
的单词中$1~/xampl/
我提出的代码行完美无缺,除非使用
awk -f awkfile inputfile > outputfile
理想情况下,只是希望它增加存在而不是打印,但每次匹配时都会打印...我错过了什么?
答案 0 :(得分:1)
awk
程序遵循以下结构:
CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ]
其中CONDITION或ACTIONS是可选的。如果缺少CONDITION,请执行以下操作:
awk '{ print }'
awk将假设条件为true
并在每一行输入上执行{ print }
。
如果缺少ACTIONS,就像这样(与你的情况类似):
awk '$1~/xampl/'
awk将运行默认操作,即{print}
。如果您不想打印但只是增加,则需要添加操作,如下所示:
awk '$1~/xampl/ { c++ }'
答案 1 :(得分:0)
如果我正确理解了你的问题,你的表达只有当它出现在第一个字段的中间时才匹配单词是错误的。你的后缀索引是两个;它应该是:
#!/usr/bin/awk -f
"xampl"!=substr($1, 1, length("xampl")) && "xampl"!=substr($1, length($1)-length("xampl")+1, length("xampl")) && $1~/xampl/ {exists+=1}
可以缩短到:
#!/usr/bin/awk -f
$1~/.+xampl.+/ {exists++}
但是,这些脚本没有副作用,即您所做的只是增加一个变量,但是您永远不会打印它。这让我相信你的错误实际上是你没有向我们展示的脚本的其他部分。无论如何,从文件调用时,awk
程序的行为应该不同。