Вы можете использовать awk
для построения массива (в памяти) при чтении файла - затем END- обработать этот массив для вывода по мере необходимости.
Несмотря на то, что многие поля остаются после удаления первых 2 и последних 3 полей из записи, они становятся ключом к массиву.
awk -F, '{ ix=$NF
sub( "[^,]+,[^,]+,","") # delete first 2 fields
sub(",[^,]+,[^,]+,[^,]+$","") # delete last 3 fields
a[$0]=a[$0] ","ix }
END{ for( r in a ) { sub(",","",a[r]); print r" : "a[r] }
}' file
вывод:
cat,val1,val2val3,val4,val5 : index5,index6
bar,cat1,cat2,cat3,cat4,cat5 : index2,index4
foo,data1,data2,data3,data4,data5 : index1,index3