enumere la parte "media" de una input al final de la salida en awk

Esto es con respecto a un file de host.

ENTRADA:

1.2.3.4 foooo00001 foo001 # AIX bar0003 NOSLS NOSLS NOCOMMENT 2.3.4.1 foooo00002 foo002 fooo0002 # Linux bar0003 NOSLS NOSLS NOCOMMENT 

SALIDA:

 echo "$INPUT" | awk '{print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)}' bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS 

pero necesitamos este resultado:

 echo "$INPUT" | awk SOMEMAGIC bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS;foo001 bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS;foo002;fooo0002 

Pregunta: ¿Cómo podemos modificar el awk para agregar los alias (la cantidad puede variar, un host puede tener alias cero, uno, dos, etc.)?

El espacio es el delimitador y los alias están después de los nombres de host y siempre termina con "#".

Si te gusta awk try

 echo "$INPUT" | \ awk -v OFS=';' ' {for(i=4;$i!="#";i++) $3=$3 OFS $i print $(NF-3),$2,$1,$(NF-2),$(NF-1),$3}' 

Lo mismo que puedes hacer con GNU sed

 echo "$INPUT" | \ sed -r 's/(\S*)( \S* )(.*) # \S* (\S*)( .* )\S*/\4\2\1\5\3/;s/ /;/g' 

Puedes intentar esto:

 echo "$INPUT" | awk '{ for (i = 1; i < NF; i++) { if ($i ~ /#/) { pos = i; break; } } } { for (i = 3; i < pos; i++) s = s";"$i; print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)s }'