¿Cómo eliminar y reemplazar el separador de campo de la columna usando awk?

¿Cómo eliminar y reemplazar el separador de campo de la columna usando awk?

Tengo un archivo CSV como este:

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

Quiero eliminar los primeros ;y reemplazar los últimos para , que el resultado se vea así:

name_var type_var,
id string,
dt_depot string,
num_artc string

Respuesta1

Simplemente con sedsustitución:

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

En cuanto a awkla solución, si se supone que el archivo de entrada contiene solo 2 columnas completas, puede utilizar la siguiente awkexpresión:

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Respuesta2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

El script cambia cada ;al final de una línea para luego ,convertir cada resto asignando un valor a un campo que hace que todos los separadores de campos de entrada ( según lo establecido por ) se cambien al separador de campos de salida (un espacio en blanco de forma predeterminada). Luego imprime la línea actual especificando una condición verdadera (1) que invoca la acción predeterminada ( ).;,;-F';'print $0

Respuesta3

Con awkalgo como puede hacer el trabajo:

awk -F\; '{print $1" "$2","}'

Si no le gusta la última coma, puede reescribirla así:

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

Respuesta4

Con este comando:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

Obtienes este resultado:

name_var type_var,
id string,
dt_depot string,
num_artc string

información relacionada