awk中嵌套的BEGIN-END块

时间:2011-02-28 10:05:41

标签: linux shell awk

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

等等

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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