AWK encerrando script independente

AWK encerrando script independente

Comecei a fazer isso .. para trocar campos em um arquivo csv, mas não consigo terminar o script. O que quero fazer é concatenar os campos de 2 a 7 e agrupá-los pelo primeiro campo. Os campos 1, 8 e 9 devem ser respeitados para cada linha.

Meu trabalho

BEGIN{
FS=";"
OFS="";
x="\"\"";
}
{
for(i=2;i<=7;i++){ if($i!= x)
  k=match(a[$1], $i);
if (k == 0)
{
  a[$1]=a[$1]";"$i;
}
  b[$1]=b[$1]"-"$8""FS""$9;
}
END {
  for (g in a)
    t=split(a[g], A, ";");
  if (t == 2)
  {
    a[g]=a[g]";"x";"x";"x";"x";"x";";
    }
  if (t == 3)
  {
    a[g]=a[g]";"x";"x";"x";"x";";
  }
  if (t == 4)
  {
    a[g]=a[g]";"x";"x";"x";";
  }
  if (t == 5)
  {
    a[g]=a[g]";"x";"x";";
  }
for (h in b)
    q=split(b[h], B, "-");
for (z=1; z <= q; z++)
    b[h]=B[z];                               
}
}

Arquivo CSV;

"1033reto";"V09B";"";"";"";"";"";"QVN";"V09B"
"1033reto";"V010";"";"";"";"";"";"QVN";"V010"
"1033reto";"V015";"";"";"";"";"";"QVN";"V015"
"1033reto";"V08C";"";"";"";"";"";"QVN";"V08C"

"1040reto";"V03D";"";"";"";"";"";"QVN";"V03D"
"1040reto";"V01C";"";"";"";"";"";"QVN";"V01C"

"1050reto";"V03D";"";"";"";"";"";"QVN";"V03D"
"1050reto";"V01F";"V07L";"";"";"";"";"QVN";"V01C"
.......

Saída desejada;

O primeiro grupo é a concatenação dos campos de 2 a 7, das quatro primeiras linhas. Em seguida, repita para cada linha com o mesmo primeiro campo. O segundo grupo é a concatenação dos campos de 2 a 7, das duas linhas seguintes. Em seguida, repita para cada linha com o mesmo primeiro campo. O terceiro grupo é a concatenação dos campos de 2 a 7, das duas últimas linhas. Em seguida, repita para cada linha com o mesmo primeiro campo.

"1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V09B"
"1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V010"
"1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V015"
"1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V08C"

"1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V03D"
"1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V01C"

"1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V03D"
"1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V01C"
.......

Responder1

Oestranhoscript produz a saída desejada

awk '
BEGIN {
    FS = OFS = SUBSEP = ";"
}
$1 != f {
    for (i = 2; i < 8; i++) {
        line = line ";" A[i]
        A[i] = $i
    }
    if (NR > 1)
        for (j in B)
            print f line, j
    line = ""
    delete B
    count = 0
    f = $1
}
/^$/ {
    print $0
    next
}
{
    for (i = 2; i < 8; i++)
        if ($i !~ /""/)
            A[i + count] = $i
        else
            break
    count += (i-2)
    B[$8, $9] = 1
}
END {
    for (j in B) {
        printf "%s;", f
        for (i = 2; i < 8; i++)
            printf "%s;", A[i]
        print j
    }
}' "CSV File"

informação relacionada