Более удобный способ сделать арифметику c с выводом программы на оболочку? - PullRequest
1 голос
/ 23 апреля 2020

Мне обычно нужно запускать программы для проверки файлов, например, использовать wc для подсчета строк файла, а затем выполнить арифметику c с ним. Обычно я делаю это, просто получая выходные данные, а затем выполняю арифметику c, открывая терминал python или любое другое программное обеспечение, которое можно использовать для этого.

Если мне приходится делать это много раз , тогда это немного раздражает, и я хотел бы иметь какой-то метод для непосредственного получения вывода и выполнения желаемой арифметики c. Например, мне нравится использовать perl следующим образом, предполагая, что мне нужно взять вывод wc и разделить его на 12:

perl -e 'print `wc -l file`/12'

Это может быть полезно, но раздражает спустя некоторое время. Поскольку это, вероятно, то, что людям нужно делать постоянно, я хотел бы знать, какие более быстрые методы люди используют, чтобы делать это быстро. Я видел, что expr может быть даже лучше, но я получаю синтаксическую ошибку при передаче ему вывода чего-то, связанного в ``, как описано выше. Таким образом, по сути, самый короткий и эффективный способ сделать это простым арифметическим c в linux терминалах из файловых выходов.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Двойные скобки ((...)) выполняют арифметику c, а со знаком доллара $((...)) вы можете получить результат в виде строки.

echo $((`wc -l < file` / 12))
echo $(($(wc -l < file) / 12))

Вы можете использовать переменные, и они не нужны знаки доллара. var и $var являются приемлемыми:

lines=$(wc -l < file)
echo $((lines / 12))

if ((lines * 42 + 17 > 630)); then
    ...
fi
1 голос
/ 23 апреля 2020

Итак, в основном я проверил код на моем bash: многострочный код:

a=$(echo "hi" | wc -l)
echo $a
b=`expr $a + 2`
echo $b

, который я изменил на одну строку:

echo `expr $(echo "hi" | wc -l) + 20`
  1. echo "hi" | wc -l вычисляет число строк и находится в пределах $(), что делает ее одной переменной и оценивает ее значение
  2. Тогда expr принимает два аргумента здесь и убедитесь, что вы используете пробел до и после оператора и используйте backti c (`), чтобы оценить это и, наконец, выполнить эхо
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...