2015-11-06 2 views
1

У меня есть две команды, которые возвращают числа. Например:Linux bash сумма двух чисел из двух команд

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 в этом случае.

Как я могу это сделать?

ответ

1

Эта команда выполнит ваши две команды и напечатает сумму результатов.

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

EDIT: Как отметил @Karoly Хорват, было бы более читаемым, если это не Oneliner:

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

в этом случае один-лайнер вероятно, плохая идея. –

+0

@KarolyHorvath Это правда;) Я отредактировал ответ. – damgad

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

Просто замените эхо заявления с вашими командами.

2

Это лучше объединить эти два поиска:

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

или

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

или, если вы имена файлов могут содержать пробелы:

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

компактный и быстрый один. +1. возможно, было бы лучше добавить '' 'в regex. в случае, если имя файла имеет больше периодов (.) ... – Kent

+0

Хорошая точка! Готово. –

+0

В этом случае - хорошая идея объединить поисковые запросы. Однако он не отвечает на вопрос OP - «вернуть их сумму без изменения этих команд» – damgad

Смежные вопросы