我所有的代码都失败了。他们应该分别打印“he”、“hello”和“5 \n 3”:
awk -v e='he' {print $e} // not working, why?
awk NF { print hello }
awk { print ARGV[5,3] }
有一些关于 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 的简单例子吗?
首先,你不要在 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、... 作为文件打开和处理。
首先,基本的 shell 脚本健全性:
请注意,脚本是单个参数 - 或带有 ' -f file
' 的文件名。
awk 脚本是一系列 ' <pattern> <action>
' 对。为了清楚起见,动作用大括号 ' {}
' 括起来 - 再次保持理智。
正如 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] 的数组中添加任何内容,因此它不会打印任何内容。
尝试:
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 教程。