在快速awk命令中为每一行分配变量

时间:2010-09-30 20:34:27

标签: awk

Awk很棒的文本操作,但对我来说有点不透明。我想运行一个awk命令,归结为类似这样的东西

awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file

我想在每一行上分配$x,即不使用-v选项,然后在我的print语句中使用它。不幸的是,在; awk忘记了$1$2的值之后。将作业放在大括号之外似乎也不起作用。这是如何工作的?

1 个答案:

答案 0 :(得分:4)

AWK不对其变量使用美元符号:

awk '{x = ($3 > 0 ? 1 : -1); print $1*x "\t" $2*x}' file

在您的版本中,当读取输入文件的第一行时,您将x==0(有效地)分配1或-1到$ 0(整个输入行)。这就是$1$2似乎被“遗忘”的原因。