我打算将某些字符集匹配到某个单词的中间,在此处检查单词的开始和结尾(它不能匹配第一个或最后一个字符,否则我的目标是无效的)。然后我检查它是否在使用AWK在没有指定打印的情况下打印到我的输出文件的代码行
$1~/xampl/
字存在的代码中,我拿出的作品完美,该生产线采用
awk -f awkfile inputfile > outputfile
时除外我的理想,只是希望它存在增量和不打印,但它每次匹配打印...我错过了什么?
我打算将某些字符集匹配到某个单词的中间,在此处检查单词的开始和结尾(它不能匹配第一个或最后一个字符,否则我的目标是无效的)。然后我检查它是否在使用AWK在没有指定打印的情况下打印到我的输出文件的代码行
$1~/xampl/
字存在的代码中,我拿出的作品完美,该生产线采用
awk -f awkfile inputfile > outputfile
时除外我的理想,只是希望它存在增量和不打印,但它每次匹配打印...我错过了什么?
awk
程序遵循这种结构:
CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ]
其中任一条件或行动是可选的。如果条件不存在,这样的:
awk '{ print }'
awk将假定条件是true
和输入的每一行执行{ print }
。
如果行动是缺少,像这样(类似于你的情况):
awk '$1~/xampl/'
awk将运行默认操作,这是{print}
。如果你不想打印,但只是增加你需要添加一个动作,像这样:
awk '$1~/xampl/ { c++ }'
如果我正确理解你的问题,那么只有当它出现在第一个字段中间时,你的表达才会匹配这个词。你后缀索引是关闭的两个;它应该是:
#!/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
程序不应该有不同的行为。
我不能在这里重现这种行为;也许你的awk脚本的不同部分正在做它? –