删除某些列,并在AW中水平添加.这么多列无法输入每个列



我一直在挣扎,我无法使脚本工作。请帮助。

我的txt文件扩展到500列。

我需要删除列5,9,13,21,...,始终删除n = 4列。

然后,在删除上面提到的列后,我需要添加所有列,但不仅考虑第1列。为此,我正在使用:

awk '{print $1,$2+$3+.........}' >> comb.xvg

事情是不想手动添加直到我达到500。

我的最终文档应只有两列。

  • 从一开始的第一个
  • 以及具有所有其他总和的另一列(请注意,我在水平而不是垂直添加(。总和是从第2列到第500列的水平完成的。

有人可以帮我这样做吗?我尝试了使用循环的不同集合,但它们失败了。

我是新手,也使用堆栈。如果我不完全清楚,请我道歉,但我无法上传图片。

谢谢。

awk to Rescue!

此脚本将总结列2,3,4、6,7,8、10,..(跳过5,9,... 4K 1 ...(

awk '{sum=0; for(i=2;i<=NF;i++) sum+=(i-1)%4?$i:0; print $1,sum}'

说明我们正在总结行中的元素。如果我们将它们全部添加,sum+=$i会这样做,但是您要跳过索引2k+1的值,因此我们使用三元运算符v = c?a:b,那是 if(c) v=a; else v=b(i-1)%4是4个模量,对于i = 5,9,...,2k 1的模量为零。

删除列似乎并不需要,因为您没有打印结果面板。

测试

$ seq 20 | xargs -n 10 | awk ...

打印

1 40
11 110

要验证:sum(2 3 ... 10(= 54,因此在删除5和9后,您将获得40。对于sum(12 13 ... 20(,它是10个对于每个元素,即40 7*10 = 110。

后续问题:如何添加S2 = 2,6,10 ...;S3 = 3,7,11 ...;S4 = 4,8,12 ...

awk '{s2=s3=s4=0; 
      for(i=2;i<=NF;i+=4) 
        {s2+=$i; s3+=$(i+1); s4+=$(i+2)}; 
      print $1, s2, s3, s4}' 

相关内容

最新更新