awk输出不在bash中工作

时间:2016-10-07 16:02:25

标签: regex bash awk

我已经测试了终端中的以下行,它运行良好:

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
可以有人帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

问题似乎在这里:

DATE="2016_$m_$d"

由于_被视为变量名称的一部分,因此有效地实现了它:

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

由于您没有名为$m_的变量,实际上您将在"2016_$d"变量中获得DATE的值。

您可以使用以下方法修复它:

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

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