如何对齐 ksh 脚本报告中的十进制值
how to align the decimal values in a ksh script report
我正在尝试对齐 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"," ",," ",) >> outfile
r[NR] =
c[NR] =
}
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
可以拥有或处理文件两次的最大长度,以便在第一遍中计算它。假设你知道最大宽度,替换
printf("%14s Code %s%15s%" sq ".2f\n"," ",," ",) >> outfile
和
# vv--- here
printf("%14s Code %s%15s%" sq "10.2f\n"," ",," ",) >> outfile
将令牌的宽度扩展到 n 个字符(在本例中为 10 个)。
为了记住第一遍的长度,记住我没有测试数据,使用
awk -F, -v outfile="$outfile" -v ts="$ts" -v tc="$tc" -v sq="'" '
NR == FNR {
width = length(sprintf("%" sq ".2f", ));
if(width > maxwidth) maxwidth = width;
next
}
{
printf("%14s Code %s%15s%" sq maxwidth ".2f\n"," ",," ",) >> outfile
r[NR] =
c[NR] =
}
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", ));
if(width > maxwidth) maxwidth = width;
next
}
在第一次遍历文件时执行,当 FNR == NR
时,其余在第二次遍历时执行。请注意,trancodestotalsumt.txt
在末尾两次提供给 awk 以使其工作。
我正在尝试对齐 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"," ",," ",) >> outfile
r[NR] =
c[NR] =
}
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
可以拥有或处理文件两次的最大长度,以便在第一遍中计算它。假设你知道最大宽度,替换
printf("%14s Code %s%15s%" sq ".2f\n"," ",," ",) >> outfile
和
# vv--- here
printf("%14s Code %s%15s%" sq "10.2f\n"," ",," ",) >> outfile
将令牌的宽度扩展到 n 个字符(在本例中为 10 个)。
为了记住第一遍的长度,记住我没有测试数据,使用
awk -F, -v outfile="$outfile" -v ts="$ts" -v tc="$tc" -v sq="'" '
NR == FNR {
width = length(sprintf("%" sq ".2f", ));
if(width > maxwidth) maxwidth = width;
next
}
{
printf("%14s Code %s%15s%" sq maxwidth ".2f\n"," ",," ",) >> outfile
r[NR] =
c[NR] =
}
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", ));
if(width > maxwidth) maxwidth = width;
next
}
在第一次遍历文件时执行,当 FNR == NR
时,其余在第二次遍历时执行。请注意,trancodestotalsumt.txt
在末尾两次提供给 awk 以使其工作。