Добавить последовательные записи в столбце

У меня есть файл в формате

   0.99987799      17743.000
1.9996300       75.000000
2.9993899       75.000000
3.9991500       102.00000
4.9988999       131.00000
5.9986601       130.00000
6.9984102       152.00000
7.9981699       211.00000
8.9979200       256.00000
9.9976797       259.00000
10.997400       341.00000
11.997200       373.00000

Я хотел бы добавить данные во второй столбец каждые четыре строки. Таким образом, желаемый результат будет

1 17743+75+75+102
2 131+130+52+211
3 256+259+341+373

Как это можно сделать в awk?

Я знаю, что могу найти определенный элемент в файле, используя

awk 'FNR == 5 {print $2}' file

но я не знаю, как добавить 4 элемента подряд. Если я попробую например

awk '$2 {print FNR == 5}' file

Я получаю только нули, поэтому я не знаю, как сначала проанализировать столбец, а затем строку. Я тоже пробовал

awk 'BEGIN{i=4}
{
for (NR>=1 || NR<=i)
{
print $2
}
}' filename

но я получаю синтаксическую ошибку в NR<=i, Я также понятия не имею, как зациклить весь файл. Любая помощь или идея будет более чем приветствоваться! Или, возможно, было бы лучше сделать это в C++? Я не знаю, что удобнее …

Я тоже пробовал

awk 'BEGIN{sum=0} {{sum += $2} if(FNR%4 == 0) { print sum; sum=0}}' infile.dat

но это, кажется, не работает должным образом …

1

Решение

awk 'NR%4==1{sum=$2; next}{sum+=$2} NR%4==0{print ++j,sum;}' input.txt

Выход:

1 17995
2 624
3 1229

Для первого номера группы хранится значение второго столбца в $2, для следующих 3 строк добавляет значение второго столбца и sum, для последнего ряда группы NR%4==0 печатает результат.

Если вам не нужны номера строк до суммирования, просто удалите ++j,,

1

Другие решения

awk '{print $2}' file | paste -d+ - - - - | bc
1

Это прекрасно работает для меня:

awk '{sum += $2}
FNR%4==0 {print FNR/4, sum; sum = 0}
END {if(FNR%4){print int(FNR/4)+1, sum}}' awktest.txt

с результатом:

1 17995
2 624
3 1229
1
По вопросам рекламы [email protected]