Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex AWK在未声明打印时将代码行打印到我的输出文件_Regex_Linux_Awk - Fatal编程技术网

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脚本的另一部分在做这件事?