Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何对齐ksh脚本报告中的十进制值_Shell_Awk_Sh - Fatal编程技术网

Shell 如何对齐ksh脚本报告中的十进制值

Shell 如何对齐ksh脚本报告中的十进制值,shell,awk,sh,Shell,Awk,Sh,我正在尝试将awk中的值对齐。。但我仍然面临一些调整问题。。你能帮忙吗 我的成绩低于标准 Code 0011 0.00 Code 0012 0.00 Code 17 1,234.23 Code 37 123,456.12

我正在尝试将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

您需要知道i trancodestotalsumt.txt可以拥有的最大长度,或者在第一次传递时对文件进行两次处理以计算它。假设您知道最大宽度,则替换

printf("%14s Code %s%15s%" sq ".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
在第一次传递文件时执行,当FNR==NR时,其余在第二次传递期间执行。请注意,trancodestotalsumt.txt在最后两次提供给awk以使其工作

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
     }