gpt4 book ai didi

linux - 聚合行和求和列

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:42 25 4
gpt4 key购买 nike

我有一个包含以下几行的文件:

01323874;291874;-;000000000000003030;2511011999;-;000000000000000000 
01323874;291874;-;000000000012920840;2511011999;+;000002910023874000
01323872;291872;-;000000000000008750;2511011999;-;000000000000008750
01323872;291872;+;000000000609396980; ;+;000000000000000000
01323778; ;-;000000000468442930; ;+;000000000000000000
01323778; ;+;000000005166500460; ;+;000000000000000000
01323778; ;-;000000000469421100;2511021000;+;000000000469421100
01323778;291778;-;000000000361156930;2511021000;-;000000000361156930
01323778; ;-;000000000186088530;2511021000;+;000000000186088530
01323778;291778;-;000000000017602470;2511021000;-;000000000017602470

我想根据第一列聚合行:

考虑第 3 列中的符号 (+/-),对第 4 列的值求和。

考虑第 6 列中的符号 (+/-),对第 7 列的值求和。

01323874;291874;-;000000000012923871;2511011999;+;000002910023874000
01323872;291872;+;000000000609388230;2511011999;-;000000000000008750
01323778;291778;+;000000003663788500;2511021000;+;000000000276750230

我已经成功生成了格式良好的行,但找不到聚合它们的方法。我们将非常感谢您的帮助。

最佳答案

kent$  cat f
01323874;291874;-;000000000000003030;2511011999;-;000000000000000000
01323874;291874;-;000000000012920840;2511011999;+;000002910023874000
01323872;291872;-;000000000000008750;2511011999;-;000000000000008750
01323872;291872;+;000000000609396980; ;+;000000000000000000
01323778; ;-;000000000468442930; ;+;000000000000000000
01323778; ;+;000000005166500460; ;+;000000000000000000
01323778; ;-;000000000469421100;2511021000;+;000000000469421100
01323778;291778;-;000000000361156930;2511021000;-;000000000361156930
01323778; ;-;000000000186088530;2511021000;+;000000000186088530
01323778;291778;-;000000000017602470;2511021000;-;000000000017602470

输出

kent$  awk -F';' '{a[$1]=(1*$2?$2:a[$1]); b[$1]+=$3=="-"?-$4:$4;
c[$1]=(1*$5?$5:c[$1]); d[$1]+=$6=="-"?-$7:$7}
END{for(x in a)
printf "%s;%s;%s;%018d;%s;%s;%018d\n",
x,a[x],
(b[x]>0?"+":"-"),(b[x]<0?-b[x]:b[x]),c[x],
(d[x]>0?"+":"-"),(d[x]<0?-d[x]:d[x])}' f
01323872;291872;+;000000000609388230;2511011999;-;000000000000008750
01323778;291778;+;000000003663788500;2511021000;+;000000000276750230
01323874;291874;-;000000000012923870;2511011999;+;000002910023874000

关于linux - 聚合行和求和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44807493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com