使用AWK将DATE添加到CSV的最后一列

时间:2015-08-09 19:33:16

标签: csv awk jq

作为一个完整的bash新手,我正在努力构建一个AWK语句,将输出打印为DATE。这是我一直在尝试的。关于如何使$ 6 = $ date?

的任何想法
cat file.json | 
jq -r '.pagedEntities._embedded.teamActivityList | 
  [.[].teamName, .[].rank, .[].average, .[].total] | 
  @csv' | 
awk -F"," 'BEGIN { OFS = "," }  ; {$6=$(date) OFS $6; print}'

3 个答案:

答案 0 :(得分:2)

我知道您要求使用Awk命令,但由于您已经使用jq生成CSV文件,因此您可以在那里执行:

cat file.json | jq --arg date "$(date)" -r ' .pagedEntities._embedded.teamActivityList | [.[].teamName, .[].rank, .[].average, .[].total, $date] | @csv'

这也使您免于使用不理解他们正在处理的语言的工具的陷阱,就像Awk和CSV的情况一样;例如,如果引用任何CSV条目并且其中包含逗号,则脚本将中断。

答案 1 :(得分:1)

如果在此命令中......

awk -F"," 'BEGIN { OFS = "," }  ; {$6=$(date) OFS $6; print}'

...你试图将$ date命令的输出分配给6美元,但这不会起作用。 $(command)是Bourne shell语法,不能在awk中使用。做你想做的最简单的方法可能是:

awk -v date="$(date)" -F"," 'BEGIN { OFS = "," }  ; {$6=date; print}'

这会将date的输出分配给awk变量date,然后可以在awk脚本中使用该变量。

如果

看起来像。

答案 2 :(得分:0)

这是一个基于Santiago方法构建的解决方案,但使用jq的 now strftime 函数,而不是使用unix date命令

jq -r '
     (now|strftime("%c")) as $date
   | .pagedEntities._embedded.teamActivityList
   | [.[].teamName, .[].rank, .[].average, .[].total, $date]
   | @csv
' file.json