我正在写一个awk脚本让它为我解析一些东西。为方便起见,我希望awk脚本在linux中可执行。这是我的代码:
#!/usr/bin/awk -f
BEGIN {
FILENAME=ARGV[1]
sub_name=ARGV[2]
run=ARGV[3]
count=0
}
{
if ($4 == "ARGV[2]" && $8 == ARGV[3])
{
print $15
count=count+1
}
}
END {
print count
}
当我在linux中发出我的awk脚本时,例如:
awk会说:./ my_script 001.log type1 2
awk:./ awk_script:23:致命:无法打开文件`type1'进行阅读(没有 文件或目录)
我只想让参数“type1”作为我脚本中的变量,而不是用于解析的输入文件。我怎么能不让awk把它当作一个imput文件?
谢谢,
答案 0 :(得分:4)
不要使用shebang执行awk脚本,因为它只会使事情变得复杂:
/usr/bin/awk -v sub_name="$2" -v run="$3" '
{
if ($4 == sub_name && $8 == run)
{
print $15
count=count+1
}
}
END {
print count
}
' "$1"
请注意,您的脚本可以稍微清理一下:
/usr/bin/awk -v sub_name="$2" -v run="$3" '
($4 == sub_name) && ($8 == run) {
print $15
count++
}
END { print count+0 }
' "$1"
答案 1 :(得分:2)
从ARGV中删除非文件选项:
delete ARGV[2]
delete ARGV[3]
答案 2 :(得分:1)
如果要将它们用作变量,则必须使用-v参数。您尝试这样做的方式,建议第二个参数是输入/输出文件