2010-09-30 43 views
2

Awk对文本操作很棒,但对我来说有点不透明。我想运行归结为这样的事在快速awk命令的每一行分配一个变量

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

我想在每行分配$x,即不使用-v选项的awk命令,然后用它我打印语句中。不幸的是,在;之后,awk忘记了$1$2的值。把这项任务放在大括号之外似乎也不奏效。这个怎么用?

回答

4

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

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

在你的版本你分配1或-1,因为x==0(有效)$ 0(整个输入线),当第一读取输入文件的行。这就是为什么$1$2似乎被“遗忘”。

+0

是的,awk就像C一样,不像Perl – 2010-10-01 02:59:36