我有一个格式为
的文件 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
但它似乎没有正常工作......
答案 0 :(得分: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 :(得分:1)
awk '{print $2}' file | paste -d+ - - - - | bc
答案 2 :(得分: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