Aqui está o código awk com espaçamento recomendado e indention, você consegue ver o problema?
BEGIN { FS = "," }
{
if(a[$1])
a[$1] = a[$1] ";second" $2 ";third" $3
else
a[$1] = a[$1]second $2 ";" third$3
}
END {
for (i in a)
print i ";" a[i]
}
Você citou second
e third
na cláusula if
.
Adivinhando a saída esperada, você pode fazer assim:
awk -v c2='OOOOOOO' -v c3='XXXXXXXX' -v FS=, -v OFS=';' -v ORS=';' '
!f {
printf "%s", $1
f=1
}
{
$1 = ""
$2 = c2 $2
$3 = c3 $3
}
1
' | sed 's/;;/;/g; s/;$//'
Saída:
10.39.5.41;OOOOOOOA1;XXXXXXXXB1;OOOOOOOA2;XXXXXXXXB2;OOOOOOOA3;XXXXXXXXB3;OOOOOOOA4;XXXXXXXXB4;OOOOOOOA5;XXXXXXXXB5;OOOOOOOA6;XXXXXXXXB6
Para generalizar essa abordagem, você poderia passar os bits para preceder através de uma string e dividi-la em uma matriz awk. Em seguida, use um loop for em vez de variáveis de coluna explícitas:
awk -v prepends='OOOOOOO XXXXXXXX' -v FS=, -v OFS=';' -v ORS=';' '
BEGIN { split(prepends, cn, / +/) }
!f {
printf "%s", $1
f=1
}
{
$1 = ""
for(i=1; i<=NF; i++)
$i = cn[i-1] $i
}
1' | sed 's/;;/;/g; s/;$//'