Shell 对重复字符串末尾的值求和(特殊格式)[UNIX]
我试图为一个脚本找到一个建议或想法,该脚本可以执行以下操作: 请考虑以下文件内容的例子:Shell 对重复字符串末尾的值求和(特殊格式)[UNIX],shell,unix,Shell,Unix,我试图为一个脚本找到一个建议或想法,该脚本可以执行以下操作: 请考虑以下文件内容的例子: a,b,c,d,5 x,y,d,4,9 l,s,y,10 s,9 some,text,does,not,matter,15 规则很简单:一组分隔的字符串(可能是数字,但没有逗号),中间有逗号,末尾有一个数字:str,str,str,…,number 我知道如何使用sort命令对文件进行排序,但我想用相同的字符串对所有行进行求和,直到得到数字。考虑下面的例子: a,b,c,d,e,5 a,b,c,d,4 a
a,b,c,d,5
x,y,d,4,9
l,s,y,10
s,9
some,text,does,not,matter,15
规则很简单:一组分隔的字符串(可能是数字,但没有逗号),中间有逗号,末尾有一个数字:str,str,str,…,number
我知道如何使用sort
命令对文件进行排序,但我想用相同的字符串对所有行进行求和,直到得到数字。考虑下面的例子:
a,b,c,d,e,5
a,b,c,d,4
a,b,c,d,e,10
输出将是:
a,b,c,d,e,15
a,b,c,d,4
a,b,c,d,e,15
a,b,c,d,4
行的顺序并不重要
我认为第一步是对文件进行排序。然后,我们应该以某种方式拆分行并获得值,这样我们就可以对它们求和,但是如何进行呢?
Awk
解决方案:
awk 'BEGIN{ FS = OFS = "," }
{ num = $NF; $NF = ""; a[$0] += num }
END{ for (i in a) print i a[i] }' file
输出: