Maneira muito 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 são tr
necessários dois argumentos - conjunto de caracteres a serem substituídos e sua substituição. Nesse caso, temos apenas conjuntos de 1 caractere. Nós redirecionar input.csv
entrada tr
do fluxo stdin via <
operador de shell, e canalizar a saída resultante para tr -d '"'
excluir aspas duplas.
Mas awk
pode fazer isso também.
$ 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, sendo cada script in-line /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Como não temos um padrão, significa executar o bloqueio de código para cada linha. gsub()
A função é usada para substituição global dentro de uma linha; portanto, a substituímos por sublinhados por vírgulas e aspas duplas por uma cadeia nula (excluindo efetivamente o caractere). O 1
está no lugar da correspondência de padrão com o bloco de código ausente, o padrão é simplesmente imprimir a linha; em outras palavras, o código de bloqueio gsub()
faz o trabalho e 1
imprime o resultado.
Use o redirecionamento de shell ( >
) para enviar a saída para um novo arquivo:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv