Imprimir intervalo de colunas separadas por vírgula e o restante sem separação por vírgula

Imprimir intervalo de colunas separadas por vírgula e o restante sem separação por vírgula

Estou tentando descobrir isso.

awk '{print $1","$10","$11","$12","$13,$14,$15,$16,$17,$18,$19}' <<< "$PASTE_1" > test.csv

Preciso imprimir o $1 $10 $11 $12 separado por vírgula e depois continuar com $13 até o final da linha, sem separação por vírgula. Como existem muitos espaços em branco a partir de $13.

Responder1

Você quer dizer algo assim:

awk '{a = ""; for (i = 13 ; i <= NF ; i++) a = a $i; 
       print $1 "," $10 "," $11 "," $12 "," a}'

A entrada

a b c d e f g h i j k l m n o p q r s t u v w x y z

dá:

a,j,k,l,mnopqrstuvwxyz

Ou seja, os campos a partir de 13 são concatenados e depois impressos após 1, 10, 11 e 12.

Responder2

Uma maneira de fazer isso:

awk -v OFS=, '{print $1, $10, $11, $12, ($13 $14 $15 $16 $17 $18 $19) }'

Responder3

perl -lane 'print join(",", @F[0,9..11], q//), @F[12..$#F]'

Explicação

  1. Array @Fmantém os campos em uma linha. @F[...]refere-se a um slicedos elementos da matriz @F. Portanto, @F[0,9..11]a fatia consiste no 1º, 10º a 12 elementos de @F que são então joinunidos por commae um elemento vazio fictício q//é sufixado à fatia para gerar o necessário ,para a próxima slice. O outro slice @F[12..$#F]reúne o 13º até o último elemento do @Farray através do $#Fqual contém o idx do último elemento. (Observe que a indexação de array começa em zero Perl).
  2. Os vários argumentos para printagora são unidos com OFS= $,(o padrão é nulo).

informação relacionada