2015-02-24 75 views
0

正在尝试对齐awk中的值..但仍然面临一些对齐问题..请你帮忙。如何对齐ksh脚本报告中的十进制值

我得到下面的格式,

   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 

回答

0

您需要知道i 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 

到(在这种情况下10)延伸的令牌以n个字符的宽度。

要记住在第一通路中的长度,记住我没有测试数据承载,使用

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两次以完成这项工作。