从哪里可以开始使用简单的 AWK 示例?

发布于 2024-07-12 19:41:43 字数 220 浏览 6 评论 0原文

我的所有代码都失败了。 它们应该分别打印“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

不顾 2024-07-19 19:41:43

首先,基本的 shell 脚本编写完整性:

  • 始终将脚本用单引号括起来。

请注意,脚本是单个参数 - 或带有“-f file”的文件名。

awk 脚本是 '的序列。' 对。 为了清晰起见,再次将操作括在大括号“{}”中。

正如 Pax 所说,第一个示例应该是:

awk -v -e e='he' '{ print e }'

第二个示例难以理解 - 您可能的意思是:

awk '{ print "hello" }'

变量 NF 是该行中的字段数。 您可能会让 awk 解释

awk 'NF { print "hello" }'

为输入行上有任何数据(NF != 0,或字段数不为零),然后打印“hello”。

最后一个例子同样令人费解。 ARGV 是“awk”参数的数组,而命令行未提供任何参数。 但它是一个一维数组。 您的子脚本表示法希望将其视为 Python 字典或 Perl 哈希,并结合两个索引。 没问题 - awk 支持关联数组; 但由于您没有向 ARGV[5,2] 处的数组添加任何内容,因此它不会打印任何内容。

First, basic shell scripting sanity:

  • Always enclose your script in single quotes

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:

awk -v -e e='he' '{ print e }'

The second example is inscrutable - you probably meant:

awk '{ print "hello" }'

The variable NF is the number of fields on the line. You might get awk to interpret

awk 'NF { print "hello" }'

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.

半仙 2024-07-19 19:41:43

对于第一个,您不要使用 $ 作为 awk 内的变量,请尝试这样做:

fury> echo | awk -v e='he' '{print e}'
he

对于第二个,您的条件 NF 表示 NF!=0 因此它只会打印非空行:

fury> echo | awk 'NF {print "hello"}'
fury> echo "7 8" | awk 'NF {print "hello"}'
hello

我从未见过您的语法第三个,ARGV 是一维数组,因此您可以使用:

fury> awk 'BEGIN {print ARGV[5]}' 1 2 3 4 5 6 7
5
fury> awk 'BEGIN {print ARGV[5] "\n" ARGV[3]}' 1 2 3 4 5 6 7
5
3

注意我对第三个使用 BEGIN 块,否则它将尝试将 1, 2, 3, ... 作为文件打开和处理。

For the first, you don't use $ for variables inside awk, try this instead:

fury> echo | awk -v e='he' '{print e}'
he

For the second, your condition NF means NF!=0 so it will only print for non empty lines:

fury> echo | awk 'NF {print "hello"}'
fury> echo "7 8" | awk 'NF {print "hello"}'
hello

I've never seen your syntax for the third one, ARGV is a single dimensional array, so you can use:

fury> awk 'BEGIN {print ARGV[5]}' 1 2 3 4 5 6 7
5
fury> awk 'BEGIN {print ARGV[5] "\n" ARGV[3]}' 1 2 3 4 5 6 7
5
3

Note I'm using a BEGIN block for the third, otherwise it'll try to open and process 1, 2, 3, ... as files.

枯叶蝶 2024-07-19 19:41:43

我使用这个网站。 The O'Reilly Sed 和 awk 书也不错。

I use this site. The O'Reilly Sed & Awk book is good as well.

不…忘初心 2024-07-19 19:41:43

尝试:

echo "hello" | awk ' {print $0} '
echo "hello" | awk ' {print $1} '

请注意,$0 返回整个记录,$1 仅返回第一个条目; awk 的计数器从 1 开始。因此

echo "hello1 hello2 hello3" | awk ' {print $0} '

返回 hello1 hello2 hello3。 虽然

echo "hello1 hello2 hello3" | awk ' {print $3} '

会返回 hello3

我喜欢这个 awk 教程。

Try:

echo "hello" | awk ' {print $0} '
echo "hello" | awk ' {print $1} '

Note that $0 returns the whole record, and $1 just the first entry; awk starts its counters at 1. So

echo "hello1 hello2 hello3" | awk ' {print $0} '

returns hello1 hello2 hello3. While

echo "hello1 hello2 hello3" | awk ' {print $3} '

will return hello3

I like this awk tutorial.

夕色琉璃 2024-07-19 19:41:43

此外,http://awk.info 上有很多有用的信息和教程

Also, lots of useful info and tutorials at http://awk.info

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文