Awk很棒的文本操作,但对我来说有点不透明。我想运行一个awk命令,归结为类似这样的东西
awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file
我想在每一行上分配$x
,即不使用-v
选项,然后在我的print语句中使用它。不幸的是,在;
awk忘记了$1
和$2
的值之后。将作业放在大括号之外似乎也不起作用。这是如何工作的?
答案 0 :(得分:4)
AWK不对其变量使用美元符号:
awk '{x = ($3 > 0 ? 1 : -1); print $1*x "\t" $2*x}' file
在您的版本中,当读取输入文件的第一行时,您将x==0
(有效地)分配1或-1到$ 0(整个输入行)。这就是$1
和$2
似乎被“遗忘”的原因。