将时间戳变量从 shell 传递到 gawk

将时间戳变量从 shell 传递到 gawk

我想获取两个时间戳的时间差,但在将时间戳变量从 shell 传递到awk.

外壳代码:

FTIMESTAMP="2015-07-01 12:30:50"
gawk -v FTIMESTAMP=$FTIMESTAMP -v DSECONDS=$DSECONDS -f test.awk /home/abc/TShift.csv 

错误是:

gawk: 12:30:50
gawk:   ^ syntax error

转义字符也不起作用FTIMESTAMP="2015-07-01 12\:30\:50"

我有另一个时间戳awk,想要计算它们之间的时间差。

答案1

您需要引用变量以防止 shell 执行分割+全局:

gawk -v FTIMESTAMP="$FTIMESTAMP" -v DSECONDS="$DSECONDS" ...

-v var="$shell_var"将扩展 中的转义序列的注释$shell_var。您需要使用ENVIRONARGV变量$shell_var按原样从 shell 传递到awk.

答案2

尝试一下

gawk -v FTIMESTAMP="$FTIMESTAMP" -v DSECONDS=$DSECONDS -f test.awk /home/abc/TShift.csv 

里面有一个白色$FTIMESTAMP

或者在调用 shell 中

FTIMESTAMP="2015-07-01 12:30:50"
export FTIMESTAMP

并在 awk 的脚本中(在BEGIN { .. }部分中)

FTIMESTAMP=ENVIRON["FTIMESTAMP"] ;

相关内容