Awk для суммирования всех чисел только после строки символов

Основной сайт Flatpak не позволяет легко найти это, но исходный код Flatpak доступен на GitHub и построен способом, знакомым для большинства проектов на основе Autotools -:

git clone --recurse-submodules https://github.com/flatpak/flatpak.git
cd flatpak
./autogen.sh
./configure
make
sudo make install

Вам понадобится ряд зависимостей, которые подробно описаны в файле README.md. Вам также, вероятно, потребуется настроить некоторые из флагов ./configureв зависимости от вашей целевой среды.

Вы также можете предпочесть работать с архивом выпуска вместо клонирования репозитория.

1
09.02.2020, 11:56
3 ответа

Используйте массив для хранения всех сумм, затем в разделе END распечатайте их, но не нулевые суммы:

awk '/^[^0-9]/ {IX = $0} {SUM[IX] += $0} END {for (s in SUM) print s, SUM[s]?SUM[s]:""}' file
abc 
ghi 89
iuy 123
tuy 12
def 

Имейте в виду, что порядок, в котором индекс массива воспроизводится, например, в. (s in SUM)не определено; если вам нужен вывод в порядке появления, необходимо принять дополнительные (простые )меры.

1
28.04.2021, 23:23
$ awk 'NR==1{val=$0;next}$0~/^[0-9]*/{sum+=$0}/^[^0-9]/{print val,sum;val=$0;sum=0}END{print val,sum}' a.txt
abc 0
def 0
ghi 89
tuy 12
iuy 123

NR==1{val=$0;next}---> когда он читает первую строку, сохраняет значение в переменной val и читает следующую строку.

$0~/^[0-9]*/{sum+=$0}--> если это числовое значение, просто просуммируйте его.

/^[^0-9]/{print val,sum;val=$0;sum=0}--> если это не число, то просто напечатайте строку и сумму и сбросьте переменные val и sum

0
28.04.2021, 23:23

Печатать каждую альфа-строку без новой строки в конце, а затем выводить сумму плюс новую строку после сложения всех чисел, следующих за ней:

$ awk '
    /[[:alpha:]]/ { printf "%s%s%s%s", ofs, sum, ors, $0; sum=ofs=""; ors=ORS; next }
    { ofs=OFS; sum+=$0 }
    END { print ofs sum }
' file
abc
def
ghi 89
tuy 12
iuy 123
1
28.04.2021, 23:23

Теги

Похожие вопросы