- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
首先,我是一个 bash 菜鸟,所以请保持温柔 :)
我正在尝试对位于不同位置但名称相同的文件夹的大小求和。它看起来像这样:
root
--- directory 1
------ folder 1
--------subfolder 1
--------subfolder 2
------ folder 2
--------subfolder 3
--------subfolder 4
------ folder 3
--------subfolder 5
--------subfolder 6
--- directory 2
------ folder 1
--------subfolder 1
--------subfolder 2
------ folder 2
--------subfolder 3
--------subfolder 4
------ folder 3
--------subfolder 5
--------subfolder 6
我正在尝试将子目录 1 到 6 的大小相加并将其输出到 .csv
目前我只是在两个单独的 CSV 文件中输出子目录的大小。一个用于目录1,一个用于目录2
目前我有这个来输出我在需要的地方运行的子文件夹的大小:
du -h --max-depth=1 --block-size=GB * | grep "[\/]" | sort -n -r > ~/lists/disks/RC_job.csv
输出看起来像这样:
40GB folder1/subfolder1
15GB folder1/subfolder2
10GB folder2/subfolder 3
...
我有一个目录 1 的输出和一个目录 2 的输出。我想对目录一和目录二的子文件夹的大小求和,并得到如下所示的输出
60GB subfolder1
25GB subfolder2
10GB subfolder3
其中 subfolder1 是 directory1/folder1/subfolder1 + directory2/folder1/subfolder1
这是我在这里的第一篇文章,我不知道这些信息是否足够。如有必要,我很乐意提供更多信息。我很确定这可以用 awl 完成,但我还没有真正使用过它。
干杯!
编辑以回答评论中的问题:
du -h/net/rcq-rp/job/rcq/vault/image/film/net/rcq-rp/job/rcq/film --max-depth= 的(部分)输出1 --block-size=GB *
是:
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0010
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0020
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0030
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0035
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0040
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0045
2GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0050
1GB /net/rcq-rp/job/rcq/vault/image/film/nr106/nr106_0060
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0010
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0020
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0030
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0035
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0040
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0045
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0050
1GB /net/rcq-rp/job/rcq/film/nr106/nr106_0060
理想情况下最终输出是:
2GB nr106_0010
etc...
最佳答案
一种方法是使用关联数组。关联数组将一系列键映射到值,例如:
directory1 -> 10 GB
directory2 -> 12 MB
directory3 -> 40 KB
关联数组中的键必须是唯一的。那太棒了!我们目录的路径也是唯一的。让我们把它们放在一个关联数组中。我将展示如何在 awk
中执行此操作,但许多其他语言都有关联数组(例如 Perl,它称它们为散列)。
du | awk '{ val = $1; dir = $2; sizes[dir] = val }'
(为了简单起见,我去掉了你传递给 du
的参数)
这是做什么的? awk
逐行读取du
的输出;对于每一行,它将一个元素添加到关联数组 sizes
中,目录名称作为索引,大小作为值。如果我们的原始输入看起来像这样
40GB folder1/subfolder1
15GB folder1/subfolder2
10GB folder2/subfolder1
我们的数组看起来像这样:
sizes[folder1/subfolder1] -> 40GB
sizes[folder1/subfolder2] -> 15GB
sizes[folder2/subfolder1] -> 10GB
但在我们的最终输出中,我们只想查看子目录的值。 awk
具有字符串操作函数,因此让我们调整代码以去除前导目录:
du | awk '{ val = $1; dir = $2; sub(/^.*\//, "", dir); sizes[dir] = val }'
sub
函数会剥离从最后一个 /
到路径开头的所有内容。现在我们的数组看起来像这样:
sizes[subfolder2] -> 15GB
sizes[subfolder1] -> 10GB
太棒了!现在我们只有子目录的值。只有一个小问题。这些值不是总数。由于我们有多个名为 subfolder1
的子目录,我们用第二个值 (10GB) 覆盖了第一个值 (40GB)。当我们遇到数组中已经存在的索引时,我们真正想做的是将其值添加到现有值中:
du | awk '{ val = $1; dir = $2; sub(/^.*\//, "", dir); sizes[dir] += val }'
(我将使用赋值的 sizes[dir] = val
更改为 sizes[dir] += val
,它添加了 val
到 sizes[dir]
)
awk
神奇地为我们处理了一些事情,比如将 15GB 转换为数字 15。现在我们的数组看起来像这样:
sizes[subfolder2] -> 15
sizes[subfolder1] -> 50
它向我们显示了我们正在寻找的总数。现在,我们如何显示它?我们可以遍历数组并像这样打印出键和值:
du | awk '{ val = $1; dir = $2; sub(/^.*\//, "", dir); sizes[dir] += val } \
END { for (dir in sizes) print dir, sizes[dir], "GB" }'
我们的结果是
subfolder1 50 GB
subfolder2 15 GB
编辑:这是我在更新后的问题中使用 du
输出得到的结果。
nr106_0060 2 GB
nr106_0050 3 GB
nr106_0045 2 GB
nr106_0040 2 GB
nr106_0035 2 GB
nr106_0030 2 GB
nr106_0020 2 GB
nr106_0010 2 GB
关于linux - 巴什 : Sum size of same name directories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986707/
我有这个示例代码: #include #include int main() { Eigen::MatrixXf M = Eigen::MatrixXf::Random(1000, 1000)
我有一个像这样的数据框: +-----+--------+ |count| country| +-----+--------+ | 12| Ireland| | 5|Thailand| +-
我想要 SUM(tot_bill_1+tot_bill_2) AS 总计,但这不起作用 SELECT *, IF(SUM(bill_1) IS NULL, '99', SUM(bill_1)) AS
如果我们有两个矩阵 X 和 Y,都是二维的,现在在数学上我们可以说:sum(X-Y)=sum(X)-总和(Y). Matlab 哪个效率更高?哪个更快? 最佳答案 在我的机器上,sum(x-y) 对于
我正在运行 Hive 1.1.0 并看到对于两个 bigint 列,active_users 和 inactive_users,SUM(active_users + inactive_users) <
是否可以在一个选择查询中求和? 类似这样的事情: SELECT id, SUM(current_price - bought_price)*amount AS profit FROM purchase
这是一个相当奇怪的结果。我希望这些具有相同的产量。 下面还有从数据库中提取的 excel 链接。 https://twentius.opendrive.com/files?89038281_muoyg
我必须对 2 个字段求和,然后再求和。从性能的角度来看,先添加字段还是在对列求和之后添加字段有什么区别? 方法 1 = SELECT SUM(columnA + columnB) 方法 2 = SEL
这是一个经典问题,但我很好奇是否有可能在这些条件下做得更好。 问题:假设我们有一个长度为4*N的排序数组,即每个元素重复4次。请注意,N 可以是任何自然数。此外,数组中的每个元素都受制于 0 A. 执
我正在编写一个 Pig 程序,该程序加载一个用制表符分隔整个文件的文件 例如:名称 TAB 年份 TAB 计数 TAB... file = LOAD 'file.csv' USING PigStora
我有一个包含以下字段的表: EmpID, Code, Amount, TransDate, CM, CMDate 我想要进入数据网格的是 SUM所有的Amount具有相同的 Code和 SUM CM具
我有两个单独的查询用于提取报告信息。一年效果很好。但是,如果一个月超过 1 年,则不会显示正确的响应。 这是我的两个查询: select SUM(rpt_complete.total) total,
我想查询一个团队的积分。通过在列上执行 SUM + 来自具有相同团队 ID 的另一个表的 SUM 来添加这些点。我试着这样写: SELECT k.id, s.fylke, s.
这个问题在这里已经有了答案: How to deal with floating point number precision in JavaScript? (47 个回答) Unexpected
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 5 年前。 Improve
我已经找了一段时间,但找不到这个问题的答案(也许我没有搜索正确的术语或其他东西)。基本上,我有一个数据库,每个日期有任意数量的条目。我需要取包含条目的最后 X 天的总和(忽略没有条目的天数)。我知道如
我正在尝试获取 B 行中包含 A 行中某个值的所有值中的一些值。我猜这个问题很简单。 这是我的查询: =QUERY('Sheet1'!$A$16:D, "Select sum(D) Where C c
我正在尝试运行以下查询,但出现以下错误: You have an error in your SQL syntax; check the manual that corresponds to your
我有一个 tableA,其中包含以下结构 我将此结构修改为如下所示的tableB,以减少行数,并且类别是固定长度的 假设我在 tableA 中修改为新结构后有 210 万条数据,tableB 仅包含
我的表在 Postgres 中的数据: id user_id sell_amount sell_currency_id buy_amount buy_currency_id type
我是一名优秀的程序员,十分优秀!