Regex AWK在未声明打印时将代码行打印到我的输出文件
我打算将一些字符集匹配到单词的中间,检查单词的开头和结尾(不能匹配第一个或最后一个字符,否则我的目标无效)。然后我用这个词检查它是否存在Regex AWK在未声明打印时将代码行打印到我的输出文件,regex,linux,awk,Regex,Linux,Awk,我打算将一些字符集匹配到单词的中间,检查单词的开头和结尾(不能匹配第一个或最后一个字符,否则我的目标无效)。然后我用这个词检查它是否存在 $1~/xampl/ 除了使用 awk -f awkfile inputfile > outputfile 我希望它存在,而不是打印,但每次匹配时都会打印。。。我是否漏掉了什么? < P>如果我正确地理解了你的问题,只有在第一个字段的中间出现时,你的表达式才能匹配这个单词是错误的。你的后缀索引被关闭了2;应该是: #!/usr/bin/awk -f
$1~/xampl/
除了使用
awk -f awkfile inputfile > outputfile
我希望它存在,而不是打印,但每次匹配时都会打印。。。我是否漏掉了什么? < P>如果我正确地理解了你的问题,只有在第一个字段的中间出现时,你的表达式才能匹配这个单词是错误的。你的后缀索引被关闭了2;应该是:
#!/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
程序遵循以下结构:
CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ]
其中条件或操作是可选的。如果条件缺失,如下所示:
awk '{ print }'
awk '$1~/xampl/ { c++ }'
awk将假定条件为true
,并在每一行输入上执行{print}
如果缺少操作,如下所示(与您的案例类似):
awk将运行默认操作,即{print}
。如果您不想打印,而只是增加,则需要添加一个操作,如下所示:
awk '{ print }'
awk '$1~/xampl/ { c++ }'
我不能在这里复制这种行为;也许是你的awk脚本的另一部分在做这件事?