Tente:
$ awk -F',+' '{a[$1","$2]=a[$1","$2]","$3} END{for (ip in a)print ip a[ip]}' file | sort
111,10.1.1.1,20,21
112,10.1.1.2,10,15
Como funciona
-
-F',+'
Isso diz ao awk para usar qualquer sequência de uma ou mais vírgulas como um separador de campo.
-
a[$1","$2]=a[$1","$2]","$3
Para cada linha, adicionamos o terceiro campo a uma entrada na matriz associativa
a
sob a chave dos dois primeiros campos. -
END{for (ip in a)print ip a[ip]}
Depois de chegarmos ao final do arquivo, imprimimos cada chave da matriz
a
, seguida do valor dea
para essa chave. -
sort
Este passo opcional classifica a saída. Se a classificação for importante para você, provavelmente você desejará ajustar as opções para
sort
para obter o que deseja (por exemplo, léxico versus numérico).