【问题标题】:how to align the decimal values in a ksh script report如何在 ksh 脚本报告中对齐十进制值
【发布时间】:2015-02-24 17:15:26
【问题描述】:

我正在尝试对齐 awk 中的值。但仍然面临一些对齐问题。请您帮忙。

我正在低于格式。,

                Code 0011               0.00
                Code 0012               0.00
                Code   17               1,234.23
                Code   37               123,456.12
                Code   41               2,345.12
           Total Amount                 8.41
          0011 Record Count              0
         0012 Record Count              0
           17 Record Count              2
           37 Record Count              1
           41 Record Count              2
        Total Record Count              1

但我期待如下。,所有小数都需要正确对齐..

                Code 0011                    0.00
                Code 0012                    0.00
                Code   17                1,234.23
                Code   37              123,456.12
                Code   41                2,345.12
           Total Amount                      8.41
          0011 Record Count             0
         0012 Record Count              0
           17 Record Count              2
           37 Record Count              1
           41 Record Count              2
        Total Record Count              1

记录数也需要与上一行匹配,

            Code   37                    123,456.12
            Code   41                      2,345.12
           Total Amount                        0.00
         0319 Record Count                        0
         0329 Record Count                       11                    
         0339 Record Count                      321 

这是我尝试过的代码。,

awk -F, -v outfile="$outfile" -v ts="$ts"  -v tc="$tc" -v sq="'" '
     {
            printf("%14s Code %s%15s%" sq ".2f\n"," ",$1," ",$2) >> outfile
            r[NR] = $1
            c[NR] = $3
    }
      END {printf("%14s Total Amount                 %" sq ".2f\n "," ",ts) >> outfile
              for(i = 1; i <= NR; i++) printf("%12s %s Record Count %11s  %s\n"," ",r[i]," ",c[i]) >> outfile
     }' FS=, OFS=, trancodestotalsumt.txt

【问题讨论】:

    标签: shell awk sh


    【解决方案1】:

    您需要知道我trancodestotalsumt.txt 可以拥有的数字的最大长度,或者处理文件两次以在第一遍中计算它。假设你知道最大宽度,替换

    printf("%14s Code %s%15s%" sq ".2f\n"," ",$1," ",$2) >> outfile
    

    #                              vv--- here
    printf("%14s Code %s%15s%" sq "10.2f\n"," ",$1," ",$2) >> outfile
    

    将标记的宽度扩展到 n 个字符(在本例中为 10 个)。

    要记住第一遍的长度,记住我没有测试数据,请使用

    awk -F, -v outfile="$outfile" -v ts="$ts"  -v tc="$tc" -v sq="'" '
         NR == FNR {
           width = length(sprintf("%" sq ".2f", $2));
           if(width > maxwidth) maxwidth = width;
           next
         }
         {
            printf("%14s Code %s%15s%" sq maxwidth ".2f\n"," ",$1," ",$2) >> outfile
            r[NR] = $1
            c[NR] = $3
         }
         END {
             printf("%14s Total Amount                 %" sq ".2f\n "," ",ts) >> outfile
             for(i = 1; i <= NR; i++) printf("%12s %s Record Count %11s  %s\n"," ",r[i]," ",c[i]) >> outfile
         }' FS=, OFS=, trancodestotalsumt.txt trancodestotalsumt.txt
    

    开头插入的块,

         NR == FNR {
           width = length(sprintf("%" sq ".2f", $2));
           if(width > maxwidth) maxwidth = width;
           next
         }
    

    在文件的第一次传递期间执行,当FNR == NR 时,其余在第二次传递。请注意,trancodestotalsumt.txt 在最后被赋予 awk 两次以完成这项工作。

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2011-04-07
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2016-08-23
      • 2011-03-23
      相关资源
      最近更新 更多