С awk
awk -F\/ '
/HEAD/ {next} # skip lines matching HEAD
$1 in a {
a[$1] = a[$1]","$2; next
}
{
if (last in a) print a[last]
delete a
a[$1] = $1":"$2
last = $1
}
END {
print a[last]
}' input
Если вы не возражаете загружать весь файл в память, и не заботятся о заказе (или не возражаете повторной сортировке после) простой способ с может быть
awk -F\/ '
/HEAD/ {next} # skip lines matching HEAD
{
a[$1] = a[$1] == "" ? $1":"$2 : a[$1]","$2
next;
}
END {
for (i in a) print a[i]
}' input | sort
или с современной версией GNU awk
gawk -F\/ '
/HEAD/ {next} # skip lines matching HEAD
{
a[$1] = a[$1] == "" ? $1":"$2 : a[$1]","$2
next;
}
END {
PROCINFO["sorted_in"] = "@ind_str_asc"
for (i in a) print a[i]
}' input