Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 对重复字符串末尾的值求和(特殊格式)[UNIX]_Shell_Unix - Fatal编程技术网

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
输出: