awk:如何使用变量值

时间:2016-02-05 06:40:55

标签: linux shell awk scripting

我想声明一个名为variableToUse的变量,它保存文件名路径。 我想在今天的日期附加文件名。 以下代码位于myAWK.awk

$bash: cat myAWK.awk
    BEGIN{
    today="date +%Y%m%d";
    variableToUse=/MainDir/MainDir1/MainDir2/OutputFile_today.xml
    }

    /<record / { i=1 }
    i { a[i++]=$0 }
    /<\/record>/ {
        if (found) {
             print a[i] >> variableToUse
        }
    }

我在OutputFile_today.xml收到语法错误。

如何使用变量值?

2 个答案:

答案 0 :(得分:1)

  • 你应该正确引用变量

示例

$ awk 'BEGIN{variableToUse="/MainDir/MainDir1/MainDir2/OutputFile_today.xml"; print variableToUse}'
/MainDir/MainDir1/MainDir2/OutputFile_today.xml
  • 要获取当前日期,您可以使用strftime

示例

$ awk 'BEGIN{today="date +%Y%m%d";variableToUse="/MainDir/MainDir1/MainDir2/OutputFile_"strftime("%Y%m%d")".xml"; print variableToUse}'
/MainDir/MainDir1/MainDir2/OutputFile_20160205.xml

答案 1 :(得分:1)

让你的awk脚本像这样:

BEGIN {
   today="date +%Y%m%d";
   variableToUse="/MainDir/MainDir1/MainDir2/OutputFile_" today ".xml"
}

/<record / { i=1 }
i { a[i++]=$0 }
/<\/record>/ {
    if (found) {
         print a[i] >> variableToUse
    }
}

btw还有其他几个问题: - 我没有看到found在此脚本中的任何位置设置。 - today="date +%Y%m%d"今天不会执行date command. It just assigns literal日期+%Y%m%d to variable. If you want to execute日期`命令,然后使用:

awk -v today="$(date '+%Y%m%d')" -f myAWK.awk

并从today=阻止中移除BEGIN行。