我有一组文件,每个文件都包含一个(整数)数字,即同一名称目录中的文件数(不带.txt后缀)-这是每个目录上wc的结果。
我想把文件里的数字加起来。我试过:

i=0;
find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read j; do i=$i+`cat $j.txt`; done
echo $i

但答案是0。如果我只是echo的输出:
i=0; find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read j; do echo `cat $j.txt`; done

价值观如下:
1313
1528
13465
22258
7262
6162
...

想必我必须以某种方式投射cat的输出?
[编辑]
我最终找到了自己的解决方案:
i=0;
for j in `find -mindepth 1 -maxdepth 1 -type d -printf '%f\n'`; do
    expr $((i+=$(cat $j.txt)));
done;

28000
30250
...
...
647185
649607

但公认的答案更简洁,因为它不会一路输出

最佳答案

cat的输出求和的方法应该有效。但是,您得到的是0,因为您的while循环在一个子shell中运行,因此一旦循环结束,存储总和的变量就会超出范围。有关详细信息,请参见BashFAQ/024
以下是一种解决方法,使用process substitution(而不是管道):

SUM=0
while read V; do
    let SUM="SUM+V"
done < <(find -mindepth 1 -maxdepth 1 -type d -exec cat "{}.txt" \;)

注意,我冒昧地更改了find/cat/sum操作,但是您的方法也应该可以正常工作。

关于linux - 将cat输出到bash数字变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8166522/

10-12 07:33
查看更多