
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
- Array
@F
mantiene los campos en una línea.@F[...]
se refiere a unoslice
de 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 sejoin
unencomma
y se agrega un elemento vacíoq//
ficticio al segmento para generar lo necesario,
para el próximoslice
. El otroslice
@F[12..$#F]
reúne desde el elemento 13 hasta el último de la@F
matriz a través del$#F
cual contiene el idx del último elemento. (Tenga en cuenta que la indexación de matrices comienza en ceroPerl
). - Los distintos argumentos de
print
ahora se unen conOFS
=$,
(el valor predeterminado es nulo).