bash - 打印目录和内容的逗号分隔整数大小
问题描述
以下将打印出目录及其内容的字节大小:
ls -lR | grep -v '^d' | awk '{bytes += $5} END {print "Total bytes: " bytes}'
输出如下所示:
Total bytes: 1088328265
我怎样才能最简单地修改我的命令,以便输出具有逗号分隔的数字,如下所示:
Total bytes: 1,088,328,265
解决方案
$ 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
有关语言环境和国际化问题的更多信息,请参阅语言环境。
推荐阅读
- amazon-web-services - 如何验证 AWS Redis 传输中和静态加密?
- ios - 信标测距与 BLE 扫描
- php - 用表单编辑实体部分
- mysql - 需要显示来自 2 个单独表的匹配记录
- spring - 如何在spring boot oauth2中自定义jwt解码器
- html - 为什么无法加载来自 favicon generator 的 favicon?
- amazon-cloudfront - 带有云端的服务器预加载
- karate - 空手道使用变量获取json的响应
- swift - getcurrentip 地址时迅速崩溃:FixedWidthInteger.init
- node.js - Mongo 身份验证失败或无效的连接字符串