
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 sed
sustitución:
$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string
En cuanto a awk
la solución, si se supone que el archivo de entrada contiene solo 2 columnas completas, puede utilizar la siguiente awk
expresió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 awk
algo 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