将重复字符串末尾的值相加(特殊格式)[UNIX]

时间:2018-05-22 13:41:29

标签: 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,b,c,d,e,10

输出将是:

a,b,c,d,e,15
a,b,c,d,4

线条的顺序并不重要。

我认为第一步是对文件进行排序。然后我们应该以某种方式分割线并得到值,以便我们可以求和它们,但是如何?

1 个答案:

答案 0 :(得分:0)

Awk 解决方案:

awk 'BEGIN{ FS = OFS = "," }
     { num = $NF; $NF = ""; a[$0] += num }
     END{ for (i in a) print i a[i] }' file

输出:

a,b,c,d,e,15
a,b,c,d,4