当我运行程序时,如何在某个文件上运行awk脚本而不输入文件名

当我运行程序时,如何在某个文件上运行awk脚本而不输入文件名,awk,Awk,有没有可能让一个awk程序在一个文件上运行而不给出它 运行程序时文件的名称 我试图这样做,但由于某种原因,它不起作用,有人能解释一下吗 为什么这不起作用?我如何使它起作用 #!/bin/awk -f BEGIN{ ARGV[1]="books" } { split($0,a,":") if(a[4]!="-"){ n[a[2]]=n[a[2]]+1 print $0","n[a[2]] } } END{ for(x in n){ print n[x] } } 在这个程序中,我试图让它在一个名为

有没有可能让一个awk程序在一个文件上运行而不给出它 运行程序时文件的名称

我试图这样做,但由于某种原因,它不起作用,有人能解释一下吗 为什么这不起作用?我如何使它起作用

#!/bin/awk -f
BEGIN{
ARGV[1]="books"
}
{
split($0,a,":")
if(a[4]!="-"){
n[a[2]]=n[a[2]]+1
print $0","n[a[2]]
}
}
END{
for(x in n){
print n[x]
}
}

在这个程序中,我试图让它在一个名为books的文件上运行,但它仍然不起作用

以及向
ARGV
添加一个元素,您需要增加
ARGC

#!/bin/awk -f
BEGIN{
  ARGV[1]="books"
  ++ARGC
}
从:

存储附加元素[在
ARGV
]中]并递增
ARGC
会导致读取附加文件


您可能需要编写一个使用脚本和文件名调用awk的包装器脚本。这是唯一的方法吗?