Imprime o intervalo de colunas separadas por vírgulas e o resto sem separação por vírgulas

0

Estou tentando descobrir isso.

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

Eu preciso imprimir $ 1 $ 10 $ 11 $ 12 separados por vírgula e continuar com $ 13 até a linha, sem separação por vírgula. Já que há muitos espaços em branco a partir de $ 13.

    
por DaWe4444 24.04.2017 / 11:44

3 respostas

3

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 juntos e impressos depois de 1, 10, 11 e 12.

    
por 24.04.2017 / 11:50
2

Uma maneira de fazer isso:

awk -v OFS=, '{print $1, $10, $11, $12, ($13 $14 $15 $16 $17 $18 $19) }'
    
por 24.04.2017 / 11:49
0
perl -lane 'print join(",", @F[0,9..11], q//), @F[12..$#F]'

Explicação

  1. A matriz @F contém os campos em uma linha. @F[...] refere-se a slice de elementos da matriz @F. Portanto, @F[0,9..11] é a fatia que consiste no 1º, 10º a 12 elementos de @F, que são então join -ed por comma e um elemento vazio simulado q// é sufixado à fatia para gerar o coeficiente desejado , para os próximos slice . O outro slice @F[12..$#F] reúne o 13º até o último elemento da matriz @F por meio do $#F que contém o idx do último elemento. (Por favor, note que a indexação de array é zero-começando em Perl ).
  2. Os vários argumentos para print agora estão associados ao OFS = $, (o padrão é nulo).
por 24.04.2017 / 12:31