我正在写一个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脚本时,例如:
./my_script 001.log type1 2
awk会说:
awk:./awk_script:23:致命:不能打开文件‘`type1 1’供读取(没有这样的文件或目录)
我只想让参数"type1“作为我的脚本中的一个变量,而不是用于解析的输入文件。我怎么能不让awk把它当作一个输入文件呢?
谢谢,
发布于 2015-08-06 15:09:50
不要使用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"发布于 2015-08-06 09:44:42
从ARGV中删除非文件选项:
delete ARGV[2]
delete ARGV[3]发布于 2015-08-06 09:48:49
如果要将它们用作变量,则必须使用-v参数。您试图这样做的方式,表明第二个参数是一个输入/输出文件。
https://stackoverflow.com/questions/31852186
复制相似问题