gpt4 book ai didi

linux - cat 到 bash 数字变量的输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:17 26 4
gpt4 key购买 nike

我有一组文件,每个文件都包含一个(整数)数字,这是同名目录中的文件数(不带 .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 cat 的输出:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com