从哪里可以开始使用简单的 AWK 示例?
我的所有代码都失败了。 它们应该分别打印“he”、“hello”和“5 \n 3”:
awk -v e='he' {print $e} // not working, why?
awk NF { print hello }
awk { print ARGV[5,3] }
有一些关于 AWK 的简单示例吗?
All of my codes fail. They should print "he", "hello" and "5 \n 3", respectively:
awk -v e='he' {print $e} // not working, why?
awk NF { print hello }
awk { print ARGV[5,3] }
Are there some simple examples about AWK?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先,基本的 shell 脚本编写完整性:
请注意,脚本是单个参数 - 或带有“
-f file
”的文件名。awk 脚本是 '
的序列。
' 对。 为了清晰起见,再次将操作括在大括号“{}
”中。正如 Pax 所说,第一个示例应该是:
第二个示例难以理解 - 您可能的意思是:
变量 NF 是该行中的字段数。 您可能会让 awk 解释
为输入行上有任何数据(NF != 0,或字段数不为零),然后打印“hello”。
最后一个例子同样令人费解。 ARGV 是“awk”参数的数组,而命令行未提供任何参数。 但它是一个一维数组。 您的子脚本表示法希望将其视为 Python 字典或 Perl 哈希,并结合两个索引。 没问题 - awk 支持关联数组; 但由于您没有向 ARGV[5,2] 处的数组添加任何内容,因此它不会打印任何内容。
First, basic shell scripting sanity:
Note that the script is a single argument - or a filename with '
-f file
'.An awk script is a sequence of '
<pattern> <action>
' pairs. The action is enclosed in braces '{}
' for clarity - and sanity, again.As Pax said, the first example should be:
The second example is inscrutable - you probably meant:
The variable NF is the number of fields on the line. You might get awk to interpret
as if there is any data on the input line (NF != 0, or number of fields is not zero), then print 'hello'.
The last example is likewise inscrutable; ARGV is an array of the arguments to 'awk', and the command line provided none. But it is a one-dimensional array. Your sub-scripting notation wants to treat it like a Python dictionary or Perl hash, with two indexes combined. You're OK - awk supports associative arrays; but since you didn't add anything to the array at ARGV[5,2], it won't print anything.
对于第一个,您不要使用 $ 作为 awk 内的变量,请尝试这样做:
对于第二个,您的条件 NF 表示 NF!=0 因此它只会打印非空行:
我从未见过您的语法第三个,ARGV 是一维数组,因此您可以使用:
注意我对第三个使用 BEGIN 块,否则它将尝试将 1, 2, 3, ... 作为文件打开和处理。
For the first, you don't use $ for variables inside awk, try this instead:
For the second, your condition NF means NF!=0 so it will only print for non empty lines:
I've never seen your syntax for the third one, ARGV is a single dimensional array, so you can use:
Note I'm using a BEGIN block for the third, otherwise it'll try to open and process 1, 2, 3, ... as files.
我使用这个网站。 The O'Reilly Sed 和 awk 书也不错。
I use this site. The O'Reilly Sed & Awk book is good as well.
尝试:
请注意,$0 返回整个记录,$1 仅返回第一个条目; awk 的计数器从 1 开始。因此
返回 hello1 hello2 hello3。 虽然
会返回 hello3
我喜欢这个 awk 教程。
Try:
Note that $0 returns the whole record, and $1 just the first entry; awk starts its counters at 1. So
returns hello1 hello2 hello3. While
will return hello3
I like this awk tutorial.
此外,http://awk.info 上有很多有用的信息和教程
Also, lots of useful info and tutorials at http://awk.info