A maneira mais simples é usar tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
A maneira como isso funciona é que tr
recebe dois argumentos - conjunto de caracteres a serem substituídos e sua substituição. Neste caso, temos apenas conjuntos de 1 caractere. Redirecionamos o fluxo de stdin de input.csv
input tr
via operador de shell <
e canalizamos a saída resultante para tr -d '"'
para excluir aspas duplas.
Mas awk
também pode fazer isso.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
A maneira como isso funciona é um pouco diferente: o awk lê cada arquivo linha por linha, cada script in-line sendo /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Aqui não temos um padrão, então significa executar o codeblock para cada linha. A função gsub()
é usada para substituição global em uma linha, portanto, usamos para substituir sublinhados por vírgulas e aspas duplas com uma string nula (excluindo efetivamente o caractere). O 1
está no lugar da correspondência de padrões com o bloco de códigos ausentes, cujo padrão é simplesmente imprimir a linha; em outras palavras, o codeblock com gsub()
faz o trabalho e 1
imprime o resultado.
Use o redirecionamento do shell ( >
) para enviar a saída para um novo arquivo:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv