我试图找出如何根据最后一列之前的所有值保留唯一值,但也保留最后一列数据。我还想对数据进行排序。例如:
输入
非洲是巨大的20
印度是蓝胶10
非洲是巨大的10
意大利在欧洲3
美国2014 15
意大利制作披萨3
输出:
非洲是巨大的30
美国2014 15
印度是蓝胶10
意大利制作披萨3
意大利在欧洲3
我知道你可以使用sort -n和uniq,但我不确定我可以使用的其他功能。谢谢!
答案 0 :(得分:2)
uniq
在这里不起作用,因为它无法构建第二列的总和。但您可以使用awk
:
awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}' input.file
您稍微更改了输入数据,现在awk脚本需要进行一般化。虽然上面的脚本会按照第一列的值对数据进行分组并对第二列求和,但下面的脚本会将数据按第一列的值分组,直到最后一列的之前计算并计算 last 列的总和:
awk 'match($0,/.* /){a[substr($0,RSTART,RLENGTH)]+=$NF}END{for(i in a)print i,a[i]}' file
答案 1 :(得分:0)
如果你按照最后一个之前的文字排序,你应该得到 -
sed 's/\( [0-9]*$\)/,\1/' 1 |sort -t"," -k1,1 -u |sed 's/,//'
Africa is huge 20
America 2014 15
India is blue glue 10
Italy is in europe 3
Italy makes pizza 3