在快速 awk 命令中为每一行分配一个变量
awk 在文本操作方面非常棒,但对我来说有点不透明。我想运行一个 awk 命令,它可以归结为这样的命令:
awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file
我想在每一行上分配 $x
,即不使用 -v
选项,然后使用它在我的打印声明中。不幸的是,在 ;
之后 awk 忘记了 $1
和 $2
的值。而且将作业放在大括号之外似乎也不起作用。这是如何运作的?
Awk is awesome of text manipulation, but a little opaque to me. I would like to run an awk command that boils down to something like this
awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file
I want to assign $x
on each line, i.e. not using the -v
option, and then use it inside my print statement. Unforunately, after the ;
awk has forgotten the values of $1
and $2
. And putting the assignment outside the braces doesn't seem to work either. How does this work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
AWK 在其变量上不使用美元符号:
在您的版本中,您将 1 或 -1 分配给 $0(整个输入行),因为当第一行时
x==0
(有效)读取输入文件的内容。这就是为什么$1
和$2
似乎被“遗忘”了。AWK doesn't use dollar signs on its variables:
In your version you're assigning a 1 or -1 to $0 (the entire input line) since
x==0
(effectively) when the first line of the input file is read. That's why$1
and$2
seem to be "forgotten".