1

我正在尝试使用 awk 生成一个 perforce 日志文件,然后可以将其与Gource一起使用。

Gource 允许您生成文件/项目修订历史的动画。

我尝试按照此处的示例进行操作,但它们不适用于我的仓库(尽管它们适用于 adobe 仓库!)

我还尝试了此处页面上的脚本,上面写着,

p4 changes //depot/path_to_files/|awk '{print $2}'|p4 -x - describe -s|awk '(/^Change / || /^... /) {if ($1 == "Change") {u=substr($4,1,index($4,"@")-1); t = $(NF-1) " " $NF; gsub("/"," ",t); gsub(":"," ",t);mktime(t);} else {if ($NF=="add") {c="A";} else if ($NF=="delete") {c="D";} else {c="M";};f=substr($2,3,index($2,"#")-3);print time "|" u "|" c "|" f;}}'|sort -n

但我得到一个

awk:第 0 行(NR=1):变量“mktime”不能用作函数

错误。

如果有人知道出了什么问题,我想听听你的意见!

4

1 回答 1

2

mktime是一个GNU awk扩展:

为了更容易处理此类日志文件并生成有用的报告,gawk 提供了以下用于处理时间戳的函数。它们是笨拙的扩展;它们没有在 POSIX 标准中指定,也没有在任何其他已知版本的 awk 中指定

https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

如果它在您的系统上可用,只需替换awk为:gawk

p4 changes //depot/path_to_files/             \
  | awk '{print $2}'                          \
  | p4 -x - describe -s                       \
  | gawk '(/^Change / || /^... /) {           \
      if ($1 == "Change") {                   \
          u=substr($4,1,index($4,"@")-1);     \
          t = $(NF-1) " " $NF;                \
          gsub("/"," ",t);                    \
          gsub(":"," ",t);                    \
          time = mktime(t);                   \
      } else {                                \
          if ($NF=="add") {                   \
            c="A";                            \
          } else if ($NF=="delete") {         \
            c="D";                            \
          } else {                            \
            c="M";                            \
          };                                  \
          f=substr($2, 3, index($2,"#")-3);   \
          print time "|" u "|" c "|" f;       \
      }                                       \
  }'                                          \
  | sort -n
于 2013-04-25T16:06:16.543 回答