【问题标题】:nested BEGIN-END blocks in awkawk 中嵌套的 BEGIN-END 块
【发布时间】:2011-02-28 10:05:41
【问题描述】:
awk 'BEGIN {print FILE}
{printf "Part\t\tStart\t\tEnd"
printf "%s %-6s %-6d",Part1,1,$end1
printf "%s %-6d %-6d",Part2,$start2,$end2}
END {printf "total records:%d", $tot}' >meta.txt

这是我的代码,无法正常工作。它是 shell 脚本的一部分,所有变量都在脚本的其他部分计算。 我的 I/P 文件是表格,我必须找出不。记录并以表格的形式在文件中显示结果,例如

File   Start  End
File1  1      205
file2  206    417

等等

【问题讨论】:

    标签: linux shell awk


    【解决方案1】:

    如果这些是 shell 变量,您需要将它们传递到 AWK 脚本中:

    awk -v "start2=$start2" -v "end1=$end1" -v "end2=$end2" -v "tot=$tot" 'BEGIN {print FILE}
        {printf "Part\t\tStart\t\tEnd"
        printf "%s %-6s %-6d", Part1, 1, end1
        printf "%s %-6d %-6d", Part2, start2, end2}
        END {printf "total records:%d", tot}' >meta.txt
    

    【讨论】:

      【解决方案2】:

      awk 中只有一个 BEGIN 和 END 块。我实际上并不真正了解您要做什么。所以我希望你能举出更多的例子。但是,要在 awk 中创建文件表,您可以在 BEGIN 块中进行

      awk 'BEGIN{
        print "field1\tfield2\n"
        ...
        print "one\ttwo"
        ...
      }' > outputfile.txt
      

      如果你有一个输入文件要处理,并且表格内容来自这个输入文件

      awk 'BEGIN{
        print "field1\tfield2\n"
      }
      {
        ...
        print "one\ttwo"
        ...
      }END{
        print "so some final stuff here"
      }' inputfile > outputfile.txt
      

      【讨论】:

      • awk 'BEGIN{ print "field1\tfield2\n" ... print "one\ttwo" ... }' > outputfile.txt 它不工作
      • 你为什么不展示你试图用示例输入文件做什么,并展示你想看到的输出。让我们搁置您以后可能拥有的任何代码。
      • 我有I/P文件,我想找出它们的记录数,并以File star End File1 1 213等表格的形式输出记录数
      • 您可以拥有任意数量的BEGINEND 和主块,它们将按照它们被发现的顺序进行分组(并在适当的时间执行,就好像有一个每种类型)。
      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多