在列中添加连续条目

时间:2014-05-22 09:27:40

标签: c++ awk sed grep gawk

我有一个格式为

的文件
   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

但它似乎没有正常工作......

3 个答案:

答案 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