1-е решение (объединить все поля с одним и тем же первым полем): Не могли бы вы попробовать следующее. Это позаботится о последовательности $ 1, в которой это происходит, и будет отображать вывод таким же образом. Также это будет выполняться до максимального количества полей (во всем Input_file).
awk '
!a[$1]++{
b[++count]=$1
}
{
val=val>NF?val:NF
for(i=2;i<=NF;i++){
c[$1,i]=(c[$1,i]?c[$1,i] "_":"")$i
}
}
END{
for(i=1;i<=count;i++){
printf("%s ",b[i])
for(j=2;j<=val;j++){
printf("%s %s",c[b[i],j]?c[b[i],j]:0,j==val?ORS:OFS)
}
}
}' Input_file
Вывод будет следующим:
DIA 55tyr 10 HOM 1 olig_al
ALOP 66tel_128ryp_131dat 11_11_11 HET_HET_HET 3_3_3 alin_et_ivi_es_osi_et
ANDY 12dou 13 WILD 4 sas_rar
KOLIK 16dev 14 HET 6 levi_lol
2-е решение (объединить только четные поля):
awk '
!a[$1]++{
b[++count]=$1
}
{
val=val>NF?val:NF
for(i=2;i<=NF;i++){
if(i%2==0){
c[$1,i]=(c[$1,i]?c[$1,i] "_":"")$i
}
else{
c[$1,i]=$i
}
}
}
END{
for(i=1;i<=count;i++){
printf("%s ",b[i])
for(j=2;j<=val;j++){
printf("%s %s",c[b[i],j]?c[b[i],j]:0,j==val?ORS:OFS)
}
}
}' Input_file
Вывод будет следующим:
DIA 55tyr 10 HOM 1 olig_al
ALOP 66tel_128ryp_131dat 11 HET_HET_HET 3 alin_et_ivi_es_osi_et
ANDY 12dou 13 WILD 4 sas_rar
KOLIK 16dev 14 HET 6 levi_lol