Eu tenho o seguinte awk
código. Ele primeiro determina os números de campo de interesse na linha de cabeçalho e, em seguida, imprime a saída desses campos. O problema é que estou usando uma matriz associativa para manter os números dos campos de interesse e, assim, imprimo no for
loop e não usando print
mas printf
. O problema é que ele adiciona o separador também no final da linha.
Existe alguma maneira simples de contornar isso (sem , por exemplo , percorrer a saída novamente e remover os separadores adicionais)? Ou existe uma maneira melhor de imprimir os campos cujos números sã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 no momento se parece com isso
"a","c",
1,,
"a","c",
mas eu quero que fique assim ( ou seja , sem delimitadores à direita)
"a","c"
1,
"a","c"
Modifique sua
printf()
instrução para remover o,
especificador de formato e adicione-o dentro da{..}
parte. Use um operador ternário para anexar o,
if not for o último campo