Получить пары линий и умножить

Я пытаюсь разобрать html-файл для некоторых значений, используя bash. Итак, у меня есть большой текстовый файл с такими цифрами

3 2 4 2 

То, что я хочу сделать, это получить две строки, умножить оба числа, а затем сохранить значение переменной и добавить ее в общую сумму. В этом случае это было бы 3*2=6 и 4*2=8 . Итак, X=0, X=X+6, X=X+8 тогда X=14 .

  • Переименуйте несколько файлов в свои суффиксы
  • Почему bash показывает «Terminated» после убийства процесса?
  • Bash: Почему считывается, возвращая ненулевой статус выхода во время чтения моего файла?
  • Измените имя каталогов и включенный файл
  • Попытка сравнить переменную, которая является многострочной в сравнении if
  • Как выполнить bash (в скрипте) с собственным файлом .bash_logout?
  • Ошибка Bashrc PS1
  • sed - как печатать текстовый блок со второго шаблона?
  • Соответствует ли переменная массива каталогов
  • ловушка сценария bash для выхода и err и логика разницы
  • Функция stateful bash
  • Как запустить tmux автоматически в оболочке рыбы при подключении к удаленному серверу через ssh
  • 3 Solutions collect form web for “Получить пары линий и умножить”

    Пытаться

     xargs -n2 < file | while read xy; do ((X+=x*y)); echo $X; done 
    • xargs -n2 : группирует числа попарно
    • read xy : сохранить первое и второе число в переменных x и y
    • ((...)) является просто арифметической оценкой в ​​bash

    Вы увидите на экране, как растет сумма.

    Вы можете использовать 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 принимает две строки (обозначенные как тире: - - ). Во втором случае мы используем paste чтобы взять всю серию символов и включить + между каждым атомом.

    Вот решение awk (при условии четного числа строк)

      awk '{y=$0; getline x; var += x*y};END{print var}' file.txt 
    Linux и Unix - лучшая ОС в мире.