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

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

3 2 4 2 

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

  • Скрипт для добавления пути к файлу рекурсивно
  • Замените строку в текстовом файле, используя сценарий оболочки, который не работает должным образом
  • Ошибка сравнения регулярных выражений Bash для шестнадцатеричного байта \ x01
  • Показать скользящее окно вывода из программы
  • Двоичный поиск неисправной линии
  • Заменить символ алфавитом в зависимости от позиции в строке
  • Строки из двух разных массивов не совпадают?
  • Как использовать awk для разбиения файла с помощью текстового шаблона
  • 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 
    Interesting Posts

    пожарные зоны и пакеты ICMP

    Следующие пакеты имеют неудовлетворенные зависимости

    Как `tee` удалять все строки CR только в файле, но не stdout?

    Как использовать pulseaudio для сетевого потока с Raspbmc (Kodi)?

    В чем разница между «и» – и когда использовать его?

    / bin / sh – echo >> не работает как ожидалось

    Как перечислять пакеты RPM, зависящие от конкретной библиотеки?

    Что делает этот expr в сценарии оболочки?

    Принудительная проверка fsck после перезагрузки с помощью одной команды

    Как отключить запрос пароля для автоматического обновления в Red Hat

    Ищите мета-рецепт для установки рецептов доморощенного под BSD

    труба в качестве аргументов

    Необходимо скопировать файлы в существующий каталог и удалить файлы, которые уже существуют с тем же именем, но с другим расширением

    находить файлы по имени и перемещать их с одновременным переименованием

    chroot не может найти файл cgi

    Linux и Unix - лучшая ОС в мире.