
Eu tenho um arquivo CSV assim:
name_var;type_var;
id;string;
dt_depot;string;
num_artc;string
Quero excluir os primeiros ;
e substituir os últimos por ,
para que a saída fique assim:
name_var type_var,
id string,
dt_depot string,
num_artc string
Responder1
Simplesmente com sed
substituição:
$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string
Quanto à awk
solução, se o arquivo de entrada deve conter apenas 2 colunas preenchidas - você pode usar a seguinte awk
expressão:
$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string
Responder2
$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string
O script altera todos ;
no final de uma linha para, ,
em seguida, converte todos os restantes ;
para ,
atribuindo um valor a um campo que faz com que todos os separadores de campo de entrada ( ;
conforme definido por -F';'
) sejam alterados para o separador de campo de saída (um espaço em branco por padrão). Em seguida, ele imprime a linha atual especificando uma condição verdadeira (1) que invoca a ação padrão ( print $0
).
Responder3
Com awk
algo como pode fazer o trabalho:
awk -F\; '{print $1" "$2","}'
Se você não gostar da última vírgula, ela pode ser reescrita assim:
awk -F\; '{ if (NF != 2) print $1" "$2","; else print $1" "$2;}'
Responder4
Com este comando:
awk '{sub(/;$/,",")sub(/;/," ")}1' file
Você obtém esta saída:
name_var type_var,
id string,
dt_depot string,
num_artc string