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

Using AWK to add DATE to last column of CSV

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

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

如果在此命令中...

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

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

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

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

如果这不是您想要做的,请更新您的问题以显示一些示例输入以及您希望输出看起来的示例喜欢。

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

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

这也使您免于使用不理解所处理语言的工具的陷阱,例如 Awk 和 CSV;例如,如果任何 CSV 条目被引用并且其中包含逗号,您的脚本将中断。

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

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