Linux bash两个命令输出的数字求和

3

我有两个命令,它们都返回数字。例如:

cat `find -name \*.cd -print` | wc -l

cat `find -name \*.c -print` | wc -l

假设第一个返回10,第二个返回5。

如果不改变这些命令,那么返回它们的和的命令应该是什么样子的?

我需要像这样的东西:

cat `find -name \*.cd -print` | wc -l     +     cat `find -name \*.c -print` | wc -l

在这种情况下,它应该返回15。

我该怎么做呢?

3个回答

5
那个命令将执行你的两个命令并打印结果的总和。
echo $(($(cat `find -name \*.cd -print` | wc -l)  + $(cat `find -name \*.c -print` | wc -l)))

编辑: 如@Karoly Horvath所评论的那样,如果不是一行代码会更易读:

cd_count=$(cat `find -name \*.cd -print` | wc -l)
c_count=$(cat `find -name \*.c -print` | wc -l)
echo $(($cd_count + $c_count))

在这种情况下,一行代码可能不是一个好主意。 - Karoly Horvath
@KarolyHorvath 那是真的 ;) 我已经编辑了答案。 - damgad

2

最好将两个搜索结合起来:

cat $(find -regex '.*\.cd?$') | wc -l

或者

find -regex '.*\.cd?$' | xargs cat | wc -l

或者,如果你的文件名包含空格:
find -regex '.*\.cd?$' -print0 | xargs -0 cat | wc -l

紧凑且快速。+1。如果在正则表达式中添加$,可能会更好。以防文件名有更多的句点(.)... - Kent
在这种情况下,将搜索结果合并起来是一个好主意。但这并没有回答提问者的问题 - “返回它们的总和,而不改变这些命令”。 - damgad
@damgad:我不想重复其他方法。我发表这篇文章是作为另一种选择。 - Karoly Horvath

1
$ expr $(echo 5) + $(echo 10)
15

只需用您的命令替换echo语句即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接