首页 > 解决方案 > 打印目录和内容的逗号分隔整数大小

问题描述

以下将打印出目录及其内容的字节大小:

ls -lR | grep -v '^d' | awk '{bytes += $5} END {print "Total bytes: " bytes}'

输出如下所示:

Total bytes: 1088328265

我怎样才能最简单地修改我的命令,以便输出具有逗号分隔的数字,如下所示:

Total bytes: 1,088,328,265

标签: bashawk

解决方案


$ awk 'BEGIN{printf "Total bytes: %\047d\n", 1088328265}'
Total bytes: 1,088,328,265

因此,抛开不解析 ls 的输出和摆脱 grep 的通常建议,因为您在使用 awk 时永远不需要 grep,我们可以让您的整个命令:

ls -lR | awk '!/^d/{bytes += $5} END{printf "Total bytes: %\047d\n", bytes}'

\047是如何在单引号分隔的 awk 脚本中表示单引号,然后从GNU awk 手册中表示

单引号或撇号字符是对 ISO C 的 POSIX 扩展。它表示浮点值的整数部分或整数十进制值的整个部分应包含千位分隔符。这仅适用于支持此类字符的语言环境。例如:

$ cat thousands.awk          Show source program
-| BEGIN { printf "%'d\n", 1234567 }
$ LC_ALL=C gawk -f thousands.awk
-| 1234567                   Results in "C" locale
$ LC_ALL=en_US.UTF-8 gawk -f thousands.awk
-| 1,234,567                 Results in US English UTF locale

有关语言环境和国际化问题的更多信息,请参阅语言环境


推荐阅读