我的所有代码都失败了。他们应分别打印“他”,“你好”和“5 \ n 3”:
awk -v e='he' {print $e} // not working, why?
awk NF { print hello }
awk { print ARGV[5,3] }
是否有一些关于AWK的简单示例?
答案 0 :(得分:3)
对于第一个,你不要在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,...作为文件。
答案 1 :(得分:3)
首先,基本的shell脚本健全性:
请注意,脚本是单个参数 - 或带有“-f file
”的文件名。
awk脚本是一系列“<pattern> <action>
”对。为了清楚起见,该操作用括号“{}
”括起来 - 再次是理智。
正如Pax所说,第一个例子应该是:
awk -v -e e='he' '{ print e }'
第二个例子是不可思议的 - 你可能意味着:
awk '{ print "hello" }'
变量NF是该行上的字段数。你可能会得到解释
awk 'NF { print "hello" }'
好像输入行上有任何数据(NF!= 0,或字段数不为零),然后打印'hello'。
最后一个例子同样难以理解; ARGV是'awk'的参数数组,命令行没有提供。但它是一维数组。您的子脚本编号表示希望将其视为Python字典或Perl哈希,并将两个索引组合在一起。你没关系 - awk支持关联数组;但由于你没有在ARGV [5,2]的数组中添加任何内容,因此它不会打印任何内容。
答案 2 :(得分: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 tutorial.
答案 3 :(得分:1)
答案 4 :(得分:1)