BASH 统计所有行的数字

BASH counting numbers on all lines

我的 bash 脚本需要帮助。

任务正在计算目录中文件的总大小。我已经做到了(使用 ls、awk 和 grep)。例如,我的输出可能如下所示:

1326
40
598
258
12
$

这些数字表示目录中文件的大小。 我需要数一数它们,我就卡在这里了。 因此,如果有人能告诉我如何计算所有文件(并找到目录中文件的总大小),我将不胜感激

谢谢

awk 救援!

awk '+0=={sum+=; count++} END{print sum, count}'

将所有数字相加并计算(数字为 1+0==$1,但字符串不为 1)并打印总和并在完成后计数。

嗯,在 Unix shell 编程中,永远不要忘记最基本的哲学,即:

Keep It Simple, Stupid!

法语的意思是 使用正确的工具做一件事,但做得很好。您可以通过混合 lsfindgrepawkcutsed 来实现您想要的效果] 和...,或者您可以使用专为计算文件大小而设计的工具。

那个工具是 du:

% du -chs /directory
4.3G    /directory
4.3G    total

不过,它会给出给定路径的每个目录中每个文件的 大小。如果你想将它限制为目录中的文件(而不是下面的文件),你可以这样做:

% du -chsS /directory
3G      /directory
3G      total

有关详细信息,请参阅手册页 [man du],以下是我在答案中使用的参数:

-c, --total             produce a grand total 
-h, --human-readable    print sizes in human readable format (e.g., 1K 234M 2G) 
-s, --summarize         display only a total for each argument 

如果您删除 -s,您将获得目录中每个文件的大小详细信息,如果您删除 -h,您将获得以字节为单位的完整大小(而不是四舍五入为更多可读形式),如果你删除 -c 你将不会有总计(即末尾的 total 行)。

HTH