在shell / awk中使用数千个分隔符格式化数字

时间:2015-02-23 15:44:17

标签: awk sh

awk -F, '
{ 
   printf("    Code %s  %s\n",$1,$2)
   r[NR] = $1
   c[NR] = $3
}

END { for(i = 1; i <= NR; i++) printf("  %s Record Count   %s\n", r[i],c[i])

}' totalsum.txt

这是我的输入文件

17,123456,1
16,1234,2
0211,34567,2
21,2345,2

我得到的输出如下。

Code   17  123456
Code   16  1234
Code 0211  34567
Code   21  2345
17 Record Count   1
16 Record Count   2
0211  Record Count  2
21 Record Count   2

我需要将输出格式化为。,下面用<,p>表示值

Code   16  1,234
Code 0211  34,567
Code   21  112,345
17 Record Count   1
16 Record Count   2
0211  Record Count  2
21 Record Count   2

请有人帮助我。

1 个答案:

答案 0 :(得分:5)

如果需要数千个分隔符,则需要使用%'d而不是%s作为格式说明符。由于您在命令行上传递了awk脚本,因此正确获取引号可能会非常棘手。使用帽子提示Ed Morton,这是一种方法:

#!/bin/sh
awk -F, '
{ 
   printf("    Code %s  %\047d\n",$1,$2)
   r[NR] = $1
   c[NR] = $3
}

END { for(i = 1; i <= NR; i++) printf("  %s Record Count   %s\n", r[i],c[i])

}' totalsum.txt

输出:

$ ./test.sh
    Code 37  123,456
    Code 27  1,234
    Code 0367  34,567
    Code 41  2,345
  37 Record Count   1
  27 Record Count   2
  0367 Record Count   2
  41 Record Count   2