Это не просто, но возможно.
Во-первых, вам нужны два массива.Один из них - массив 'ids' , а другой - массив 'data' .
Для каждой строки необходимо обновить массив 'ids' (поэтомуон будет содержать все возможные идентификаторы):
ids[$1] = [$1]
Затем в массиве 'data' вы должны хранить сцепленные данные.Индексы этого массива будут «поддельными» многомерными:
data[$1,5] = data[$1,5] ? data[$1,5] "; " $5 : $5
data[$1,6] = data[$1,6] ? data[$1,6] "; " $6 : $6
data[$1,78] = data[$1,78] ? data[$1,78] "; " $7 "-" $8 : $7 "-" $8
data[$1,9] = data[$1,9] ? data[$1,9] "; " $9 : $9
data[$1,10] = data[$1,10] ? data[$1,10] "; " $10 : $10
data[$1,12] = data[$1,12] ? data[$1,12] "; " $12 : $12
data[$1,13] = data[$1,13] ? data[$1,13] "; " $13 : $13
В блоке 'END' вы должны выполнить итерацию массива 'ids' , но принятьзначения из 'data' array:
END {
for (i in ids)
print i, data[i,$5], data[i,$6], data[i,$78], data[i,$9], data[i,$10], data[i,$12], data[i,$13]
}
PS: если вы используете более новые версии gawk , есть более простой способ получить результат, потому что эти версии поддерживаютистинные многомерные массивы.