Как суммировать каждую N-ю строку в awk?



Я хочу вывести сумму всех N строк, например, каждые 4 строки:



cat file
1
11
111
1111
2
22
222
2222
3
33
333
3333


Вывод должен быть:



6 #(1+2+3)
66 #(11+22+33)
666 #(111+222+333)
6666 #(1111+2222+3333)


Как я могу сделать это с awk?

510   1  
awk

1 ответ:

В основном вы можете использовать следующую команду awk:

awk -vN=4 '{s[NR%N]+=$0}END{for(i=0;i<N;i++){print s[i]}}' input.txt

Вы можете выбрать N, Как вы хотите.

вывод:

6666
6
66
666

Но вы видите, что выходные данные не сортируются так, как ожидалось при итерации через массив awk. Вы можете исправить это, сдвинув номер строки на -1:

awk -vN=4 '{s[(NR-1)%N]+=$0}END{for(i=0;i<N;i++){print s[i]}}' a.txt

Вывод:

6
66
666
6666

Comments

    Ничего не найдено.