【问题标题】:awk - counting content of filesawk - 计算文件的内容
【发布时间】:2012-03-11 20:56:44
【问题描述】:

我想制作一个 awk 脚本来计算它有多少文件作为参数, 如果我在 BEGIN 或 END 处使用计数器,结果将始终为 1; awk 是否合并我作为参数提供的文件?

无论我提供多少个文件作为参数,以下脚本都会打印“1” (“n”将用于计算所有文件中有多少单词)

BEGIN {nrFiles++}
{ n+=NF}
END {print nrFiles}

最后的结果:

{ n+=NF}
END {print "Number of files=",ARGC-1, "\nNumber of words=",n,"\nMean number of words=",n/(ARGC-1)   }

感谢您的宝贵时间

【问题讨论】:

  • 即使文件为空也必须工作吗?
  • 未指定,但我找到了 ARGC 变量(存储命令行参数的数量),如果我传递了 3 个文件 ARGC=4。我想我可以用这个对吗?
  • 其他参数如 -v 也将包含在 ARGC 计数中。
  • @VaughnCato,我不这么认为:试试这个awk -v a=b -v c=d 'BEGIN {for (i=0; i<=ARGC; i++) printf("%d\t%s\n",i,ARGV[i])}' file*
  • GNU awk 也有 BEGINFILE and ENDFILE blocks 如果您需要使用它们。

标签: shell awk


【解决方案1】:
$ awk 'BEGIN { print ARGC - 1 }' file1 file2 file3
3

【讨论】:

    【解决方案2】:

    如果你有 GNU awk,还有:

    gawk 'BEGINFILE {n++; nextfile} END {print n}' *
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-29
      • 2015-02-14
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多