Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/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输出在bash内不工作_Regex_Bash_Awk - Fatal编程技术网

Regex awk输出在bash内不工作

Regex awk输出在bash内不工作,regex,bash,awk,Regex,Bash,Awk,我在terminal中测试了以下线路,它工作正常: zcat file_2016_01_01.gz | awk 'BEGIN { FS= "|"}; {if ($1 =="START" && $7 == "1234") {flag=1}} flag ; {if ($1=="STOP"){flag=0}}'> exit.txt 但是,当我尝试自动提取bash脚本中的几个文件时,输出文件是空的: 更新代码:对for循环进行了注释,以表明这不是问题所在 #!/bin/bash

我在terminal中测试了以下线路,它工作正常:

zcat file_2016_01_01.gz | awk 'BEGIN { FS= "|"}; {if ($1 =="START" && $7 == "1234") {flag=1}} flag ; {if ($1=="STOP"){flag=0}}'> exit.txt
但是,当我尝试自动提取bash脚本中的几个文件时,输出文件是空的:

更新代码:对for循环进行了注释,以表明这不是问题所在

#!/bin/bash
REF="ref"
CODE="code"
REP="path_to_file"
#for m in 0{1..3}
#do
#  for d in 0{1..9} {10..31};
#  do
#    DATE="2016_${m}_${d}"
DATE="2016_01_04"

EXIT=${REF}_${CODE}_${DATE}.gz
if [ -e $REP/file_$DATE.gz ]
    then
            zcat $REP/file_$DATE.gz | awk 'BEGIN { FS= "|"}; {if ($1 =="START" && $7 == "'"$CODE"'" && $18== "'"$REF"'") {flag=1}} flag ; {if ($1=="STOP"){flag=0}} ' > $EXIT
    else
            echo "File not found!"
fi
#  done
#done
exit 0

有人能帮我吗?非常感谢

问题似乎在这里:

DATE="2016_$m_$d"
由于
\uu
被视为变量名的一部分,因此它实际上是:

DATE="2016_${m_}${d}"
由于您没有名为
$m
的变量,因此实际上您将在
日期
变量中获得
“2016\$d”
的值

您可以使用以下方法进行修复:

DATE="2016_${m}_${d}"

还建议您在shellcheck.net上检查脚本,以查找并修复其他明显错误。

自动发现您的即时错误和其他几个错误。考虑在你的代码运行之前,让人类参与未来。我看到了SPELLECKER的评论,代码中没有任何实际问题,但是我用一个版本“通过”更新了代码。拼写检查器。您的代码仍然存在给定的bug——当可能触发bug的值作为常量提供时,它们会关闭一些警告,而这些常量不会。在这里,我有点不同意@koalaman(它的维护者)<代码>[-e“$REP/file_$DATE.gz”]需要引用
zcat“$REP/file\u$DATE.gz”
同样需要引号。如果您没有使用
REP=“path\u to\u file”
而是使用了
REP=$1
,那么shellcheck(即“静态检查”,而不是“拼写检查”)将正确地显示关于该值如何扩展的警告——具体来说“对for循环进行了注释,表明这不是问题所在”-DATE=“2016\u$m\u$d”将始终展开
$m\u
,而不是
$m
。无法想象该行会像最初编写的那样正确。为了证明这是否是问题,我删除for循环并编写一个日期=”而且输出文件仍然是空的。PS:我做了主要问题中的拼写检查。使用
bash-x script.sh运行脚本并查看每个步骤的输出。这将帮助您找到失败的命令。谢谢,我能够看到-x选项的问题