У меня есть файл в формате
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
но это, кажется, не работает должным образом …
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,
,
awk '{print $2}' file | paste -d+ - - - - | bc
Это прекрасно работает для меня:
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