
Я пытаюсь разобрать html-файл на некоторые значения с помощью bash. Итак, у меня есть большой текстовый файл с числами вроде этого
3
2
4
2
Я хочу получить две строки, умножить оба числа, а затем сохранить значение в переменной и добавить его к итогу. В этом случае это будет 3*2=6
и 4*2=8
. X=0, X=X+6, X=X+8
Тогда X=14
.
решение1
Пытаться
xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
xargs -n2
: группирует числа в парыread x y
: сохранить первое и второе число в переменныхx
иy
((...))
это просто арифметическая оценка в bash
На экране вы увидите, как растет сумма.
решение2
Вы можете использовать paste
и bc
для выполнения любых действий:
$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14
Авария
Здесь мы видим, что paste
берется по 2 за раз и между ними ставится знак умножения.
$ paste -d"*" - - <file.txt
3*2
4*2
Аналогичный подход можно использовать для включения знаков умножения:
$ paste -d"*" - - <file.txt | paste -d"+"
3*2+4*2
Наконец, готовую строку можно передать для bc
выполнения математических операций.
$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14
Использование paste
в приведенных выше командах различается. При выполнении слияния строк для формирования X*Y мы говорим paste взять 2 строки (обозначенные как тире: - -). Во втором случае мы используем , paste
чтобы взять всю серию символов и вставить a +между каждым атомом.
решение3
Вот awk
решение (предполагая четное количество строк):
awk '{y=$0; getline x; var += x*y};END{print var}' file.txt