awk imprime una matriz asociativa con OFS

awk imprime una matriz asociativa con OFS

tengo el siguiente awkcódigo. Primero determina los números de campo de interés en la línea de encabezado y luego imprime el resultado de esos campos. El problema es que estoy usando una matriz asociativa para mantener los números de campo de interés y, por lo tanto, imprimo en el forbucle y no uso printsino printf. Su problema es que agrega el separador también al final de la línea.

¿Hay alguna forma sencilla de solucionar esto (sinp.ej¿Recorrer la salida nuevamente y quitar los separadores adicionales)? ¿O existe una mejor manera de imprimir los campos cuyos números están almacenados en una 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

un archivo de prueba se ve así

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

y mi salida actualmente se ve así

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

pero quiero que se vea así (es decir, sin delimitadores finales)

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

Respuesta1

Modifique su printf()declaración para eliminar del ,especificador de formato y agregarla dentro de la {..}parte. Utilice un operador ternario para agregar ,si no es para el último campo

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

información relacionada