我试图在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
答案 0 :(得分: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
将令牌的宽度扩展为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
在开头插入的块,
NR == FNR {
width = length(sprintf("%" sq ".2f", $2));
if(width > maxwidth) maxwidth = width;
next
}
在第一次传递文件时执行,当FNR == NR
时,其余时间在第二次传递期间执行。请注意,trancodestotalsumt.txt
最后会给awk两次以使其工作。