如何在shell脚本生成的文件顶部编写标题

时间:2014-04-02 03:06:12

标签: linux shell file-io awk

我有一个shell脚本,可以在文件中写入一些数据。我想在文件中打印实际数据之前添加标题"Instance Details",该标题应居中对齐。

我试过这段代码:

out="Instances_$today_date"

awk -F'\t' -v of="$out" '

    # (input and other code omitted...)

    BEGIN { # Set the printf() format string for the header and the data lines.
    fmt = "%-12s %-33s %-15s %s\n"
    # Print the header
    printf("Instance Details") > of
      printf(fmt, "Instance id", "Name", "Owner", "Cost.centre") > of

}'

但执行此代码后我得到的输出:

Instance DetailsInstance id  Name                              Owner           Cost.centre

预期输出:

                              Instance Details


Instance id  Name                              Owner           Cost.centre

任何领导都非常感谢。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

awk -F'\t' -v of="$out" '

  # (input and other code omitted...)

  BEGIN { # Set the printf() format string for the header and the data lines.
     # Print the header
    headerText="Instance Details"
    headerMaxLen=74
    padding=(length(headerText) - headerMaxLen) / 2
    printf("%" padding "s" "%s" "%" padding "s"  "\n\n\n", "", headerText, "") > of
    fmt="%-12s %-33s %-15s %s\n"
    printf(fmt, "Instance id", "Name", "Owner", "Cost.centre") >> of
  }'
  • 通过变量of传递输出文件的名称。
  • 计算Instance Details两侧的必要填充,使其显示在输出行的中心位置(从最终输出行的长度导出的行长度)。
  • 使用3个换行符输出Instance Details以创建所需的空行。
  • (请注意,第二 printf语句是否使用> of>> of并不重要 - 在任何情况下,文件都附加 to。)