Imprimir rango de columnas separadas por comas y el resto sin separación de comas

Imprimir rango de columnas separadas por comas y el resto sin separación de comas

Estoy tratando de resolver esto.

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

Necesito imprimir los $1 $10 $11 $12 separados por coma luego continuar con $13 hasta el final de la línea, sin separación por coma. Ya que hay muchos espacios en blanco desde $13.

Respuesta1

Te refieres a algo como esto:

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

la 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

da:

a,j,k,l,mnopqrstuvwxyz

Es decir, los campos que comienzan desde 13 se concatenan y luego se imprimen después de 1, 10, 11 y 12.

Respuesta2

Una forma de hacerlo:

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

Respuesta3

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

Explicación

  1. Array @Fmantiene los campos en una línea. @F[...]se refiere a uno slicede los elementos de la matriz @F. Entonces, @F[0,9..11]el segmento consta de los elementos primero, décimo y 12 de @F que luego se joinunen commay se agrega un elemento vacío q//ficticio al segmento para generar lo necesario ,para el próximo slice. El otro slice @F[12..$#F]reúne desde el elemento 13 hasta el último de la @Fmatriz a través del $#Fcual contiene el idx del último elemento. (Tenga en cuenta que la indexación de matrices comienza en cero Perl).
  2. Los distintos argumentos de printahora se unen con OFS= $,(el valor predeterminado es nulo).

información relacionada