在列中添加连续条目

Add consecutive entries in a column

本文关键字:连续 添加      更新时间:2023-10-16

我有一个格式为的文件

   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

但是我在CCD_ 1处得到语法错误。我也不知道如何在整个文件上循环。欢迎任何帮助或想法!或者,也许在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相加。对于组的最后一行,CCD_ 5打印结果。

如果在求和结果之前不需要行号,只需删除++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