【发布时间】:2023-04-10 16:24:01
【问题描述】:
我有一些来自ls -alth 的输出:
drwxr-xr-x 5 root admin 170B Aug 3 2016 ..
drwxr-xr-x 5 root admin 70B Aug 3 2016 ..
drwxr-xr-x 5 root admin 3B Aug 3 2016 ..
drwxr-xr-x 5 root admin 9M Aug 3 2016 ..
现在,我想解析出170B 部分,这显然是人类可读格式的大小。我想使用cut 或sed 来执行此操作,因为我不想使用比必要更复杂/难以使用的工具。
理想情况下,我希望它足够强大以处理大小附带的B、M 或K 后缀,并相应地乘以1、1000000 和1000。不过,我还没有找到一个好的方法。
我尝试了一些方法,但并不真正了解最佳方法:
ls -alth | cut -f 5 -d \s+
我希望这会奏效,因为我可以将其分隔在一个或多个空格上。
但这不起作用。如何为cut 提供正则表达式分隔符?或者有没有更简单的方法从ls -alth 中提取文件的大小?
我使用的是 CentOS6.4
【问题讨论】:
-
为什么不只是
ls -alth |cut -d" " -f5..? -
我实际上从未听说过这个选项。这不起作用,因为它需要在任意数量的空间上拆分。您的示例仅在一个空格上拆分。我在问题中添加了更多示例行以使其更加清晰。
-
好吧……那
ls -alth |awk '{print $5}'呢?默认情况下,这适用于任何空白。顺便说一句,即使在我的 Debian 中使用 cut 也可以。 -
我试图避开
awk,因为它对我来说是一个不熟悉的工具。不过这可能会奏效。请给我写一个完整的答案,看看你有条理的思考过程以及权衡。