Shell 如何对齐ksh脚本报告中的十进制值
我正在尝试将awk中的值对齐。。但我仍然面临一些调整问题。。你能帮忙吗 我的成绩低于标准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
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
}