awk imprimindo um array associativo com OFS

awk imprimindo um array associativo com OFS

Eu tenho o seguinte awkcódigo. Ele primeiro determina os números dos campos de interesse na linha do cabeçalho e depois imprime a saída desses campos. A questão é que estou usando um array associativo para manter os números dos campos de interesse e assim imprimo no forloop e não uso printmas sim printf. O problema dela é que ele adiciona o separador também no final da linha.

Existe alguma maneira simples de contornar isso (sempor exemplopercorrendo a saída novamente e removendo os separadores adicionais)? Ou existe uma maneira melhor de imprimir os campos cujos números estão armazenados em uma matriz?

awk '
    BEGIN {
        FS = ","; OFS = ","
        no_headers = 2; headers[1] = "header1"; headers[2] = "header3"
        k = 0
    }

    NR==1 {
        for (i=1; i<=no_headers; i++) {
            for (j=1; j<=NF; j++) {
                s = gensub(/"/, "", "g", $j)
                if (s==headers[i]) { col_no[++k] = j }
            }
        }
    }

    NR>1 {
        for (i=1; i<=k; i++) { printf "%s,", $col_no[i] }
        print ""
    }' test_awk.txt

um arquivo de teste se parece com isso

"header1","header2","header3","header4"
"a","b","c",4
1,"b",,"d"
"a","2","c","d"

e minha saída atualmente é assim

"a","c",
1,,
"a","c",

mas eu quero que fique assim (ou seja, sem delimitadores finais)

"a","c"
1,
"a","c"

Responder1

Modifique sua printf()instrução para remover o ,do especificador de formato e adicione-o dentro da {..}parte. Use um operador ternário para anexar o ,if not ao último campo

printf "%s", (i==k) ? $col_no[i] : $col_no[i]","

informação relacionada