【发布时间】:2018-03-29 23:44:09
【问题描述】:
需要你的帮助, 有一个文件,其中数据如下所示。 以下两种情况的数据仅存在于 1(单个)文件中,并且仅在可能的情况下才希望在同一文件中获得预期的输出
场景 1:
如果第一列中的值DocumentNo 出现一次并且
第二列 Line 的值为 10,然后我想对第 3、4、5 和 6 列(Taxablevalue,IGSTAmount,CGSTAm 和 SGSTAmo)求和,并放置/替换我们在八列中求和的这个值 @987654325 @:
示例数据:
DocumentNo|Line|Taxablevalue|IGSTAmount|CGSTAm|SGSTAmo|OthTa|InvoiceValue
262881894|10|10000|0|900|900||
情景 2:
如果我们在第一列 DocumentNo 中有多个具有相同值的行,在第二列 LineN 中有唯一值,那么我想将第 3、4、5 和 6 列的所有值相加(Taxablevalue,IGSTAmount,CGSTAm和SGSTAmo) 并放置/替换我们在每行的八列Invoicevalue 中求和的值。
示例数据:
DocumentNo|LineN|Taxablevalue|IGSTAmo|CGSTAmo|SGSTAmou|OthTa|InvoValue
262881894|10|10000|0|900|900||
262881894|20|15000|0|1350|1350||
262881894|30|20000|0|1800|1800||
预期输出场景一:
DocumentNo|Line|Taxablevalue|IGSTAmount|CGSTAm|SGSTAmo|OthTa|InvoiceValue
262881894|10|10000|0|900|900||11800
预期输出场景 2:
发票金额 = 10000+15000+20000+0+0+0+900+1350+1800+900+1350+1800 = 53100
DocumentNo|LineN|Taxablevalue|IGSTAmo|CGSTAmo|SGSTAmou|OthTa|InvoValue
262881894|10|10000|0|900|900||53100
262881894|20|15000|0|1350|1350||53100
262881894|30|20000|0|1800|1800||53100
以下是尝试过的代码,但无法弄清楚如何将附加值放入 lastcolumn(InvoValue)
awk '{a[$1]+=$3;b[$1]+=$4;c[$1]+=$5;d[$1]+=$6;}
END {for(i in a) { print " " a[i] " " b[i] " " c[i] " " d[i];}}' File
下面是我得到的代码输出。可悲的是它与我的预期输出不匹配:
0 0 0 0
【问题讨论】:
-
为此道歉..分享我在几分钟内尝试过的代码
-
什么是分隔符?制表符?
-
@Andriy Makukha..分隔符是管道“|”
-
@kvantour..已经更新了我的问题..请检查
-
@as7951 还有几个小问题:输入是否在第 1 列中排序? cfr 列 1 和列 2 是否会出现相同的行?在情况 1 中,
$2是 10 重要吗?