5

这是我的 awk 语句的片段。我试图在语句中插入这两个变量,但它们没有得到评估。有人可以指出我正确的方向吗?

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`

awk '{if (NR<2) {print "["$1, $2, $3"]"}}'

我正在尝试这个:

awk '{if (NR<2) {print "[" $DAY, $1, $2, $3, $ZONE "]"}}'

这里的这个技巧帮助解决了我的问题。

通过用“'”将它们括起来(即双引号 - 单引号 - 双引号)来保护 shell 变量免受 awk 的影响。

awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file

4

3 回答 3

16

您可以使用 -v 选项:

ZONE=`date "+%Z %Y"`
DAY=`date "+%a"`
awk -vzone="$ZONE" -vday="$DAY" 'BEGIN { print zone, day }'
于 2012-04-07T15:31:16.510 回答
1

这些变量不会在用单引号括起来的地方展开。考虑在 awk 表达式中使用双引号作为最外层引号和转义双引号。

不过,我只是在这里猜测,因为您似乎没有包含您使用的实际命令,其中嵌入了变量,但没有被评估。

将来,或者如果此答案没有帮助,请考虑包括您使用的命令及其输出以及您期望发生的情况的解释。这样,你会更容易理解你的意思。

于 2012-04-07T13:47:19.777 回答
0

我喜欢上面 yazu 的回答,虽然为了让它在我的 MaxOSX (BSD) 环境中工作,我不得不调整语法:

~ $ ZONE=`date "+%Z %Y"`
~ $ DAY=`date "+%a"`
~ $ awk -v zone="$ZONE" -v day="$DAY" 'BEGIN { print zone, day }'
CEST 2018 Wed
于 2018-05-09T15:40:32.650 回答