【发布时间】:2014-07-11 06:05:13
【问题描述】:
我有一个格式如下的文件
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
但它似乎无法正常工作......
【问题讨论】:
-
你能展示一下你到目前为止得到了什么吗?
-
@fedorqui:非常感谢您的评论!我已经更新了我的问题!
-
@miltonb :几个小时以来,我一直在尝试寻找一些东西,但我不知道如何继续。任何帮助都非常受欢迎!
-
我会尝试这样的事情:在 BEGIN 创建累加器
sum=0,为每一行添加sum += $2,然后如果是每第四行打印结果并重新初始化累加器:if(FNR%4 == 0) { print sum; sum=0}.在 END 你可以检查最后四个是否完成,如果没有打印剩余的部分sum。 -
@CiaPan :非常感谢您的评论!它似乎无法正常工作。也许我做错了什么。请检查我编辑的问题!