我是新手,我想问如何添加同名文件的大小?我的文件名实际上彼此不同,但我将它们剪切下来,以便获得分组在一起的文件。
这是我的原始文件及其大小(样本)
sample.txt 里面有以下数据:
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 a_2.txt
现在我剪切了sample.txt里面的文件名,去掉了以“_”(下划线)开头的字符。它们变成了这样:
- 12345 一
- 12234 百
- 32123 号
- 11122 一
现在我想将所有文件名相同的文件的大小相加,如上所示。输出应如下所示:
- 23467 一
- 12234 百
- 32123 号
请帮忙。非常感谢大家。我在这里被困了好几个小时了
答案1
假设没有行号sample.txt
:
cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'
您可能希望| sort -k 2
在最后添加。
EDIT1-按要求解释:
该cut
命令会用_
分隔符剪切每一行并仅保存第一部分。您已对原始文件执行此操作。
然后该awk
命令在每一行中找到两个字段。我们称它们为尺寸和姓名,但在内部awk
将它们称为$1
和$2
。对于每一行,它都会增加一个数组元素a
(名称a
是任意选择的,与示例中的文件名无关)。姓名 $2
告诉要增加哪个元素——它是一个索引;尺寸 $1
是增量值。awk
足够聪明,可以初始化a
元素,0
因为它是第一次提到的。 每次其索引(姓名) 作为输入行的第二个字段出现。最后(输入的最后一行之后)awk
遍历每个已知的索引a
并打印值(现在是累计大小) 和指数 (姓名)。
答案2
要获得以 开头的每个文件的总数,a_
您可以这样做:
du -c a_* | grep total
du
计算所有文件的大小,然后-c
计算总大小。grep 只提取总大小,而不是提取所有单个文件。