Como excluir e substituir o separador de campo da coluna usando o awk?

Como excluir e substituir o separador de campo da coluna usando o awk?

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 sedsubstituição:

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

Quanto à awksolução, se o arquivo de entrada deve conter apenas 2 colunas preenchidas - você pode usar a seguinte awkexpressã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 awkalgo 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

informação relacionada