2015-02-24 27 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兩次以完成這項工作。