tengo el siguiente awk
có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 for
bucle y no uso print
sino 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]","