用于参数化的AWK命令

时间:2017-03-17 03:08:39

标签: awk parameters gawk

我可以运行:

awk -v DATE="$(date +"%d%m%Y")" 'BEGIN{print DATE }1''1; END{print "EOF"NR-1}' Assgmt_B1_v1_16032017.CSV  > NoticesPrinting_v1_farah.csv

但参数化后,我再也无法跑了......请帮助我。

 Today_Date=`date +"%d%m%Y"`
 Current_Date=`date +"%d%m%Y"`


awk -v DATE="${Today_Date}" path="${Target_Dir}"'BEGIN{print DATE};END{print "EOF"NR-1}' "${Source_Dir}/${log}" > file= path ""NoticesPrinting_v1".csv"

输入:

Header 1|Header 2|Header 3
10000001|10000002|10000003

输出:

17032017
Header 1|Header 2|Header 3
10000001|10000002|10000003
EOF1

1 个答案:

答案 0 :(得分:3)

您的情况下语法错误

awk -v DATE="$(date +"%d%m%Y")" 'BEGIN{print DATE }1''1; END{print "EOF"NR-1}' Assgmt_B1_v1_16032017.CSV  > NoticesPrinting_v1_farah.csv
                                                     ^
                                                    Here unnecessary quote

像这样纠正

awk -v DATE="$(date +"%d%m%Y")" 'BEGIN{print DATE }1; END{print "EOF"NR-1}' Assgmt_B1_v1_16032017.CSV  > NoticesPrinting_v1_farah.csv

awk -v DATE="${Today_Date}" path="${Target_Dir}"'BEGIN{print DATE};END{print "EOF"NR-1}' "${Source_Dir}/${log}" > file= path ""NoticesPrinting_v1".csv"
                            ^                   ^
                        Missing -v             Missing space                                                         ^
                                                                                                                  O/p redirection

如下所示纠正

awk -v DATE="${Today_Date}" -v path="${Target_Dir}" '
          BEGIN{print DATE};
          END{print "EOF"NR-1}
 ' "${Source_Dir}/${log}" > "NoticesPrinting_v1.csv"

和反引号(`...`)是最老的非POSIX兼容的bourne-shell所需的遗留语法,$(...)是POSIX,更优选,至少{{1}在视觉上更突出。

$(...)

Today_Date=`date +"%d%m%Y"`

请参阅:Why is $(...) preferred over (`...`) (backticks)?

回答评论

  

输出结果但只有标题和预告片...输出   不会出现

Today_Date=$(date +"%d%m%Y")