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
Apenas como alternativa, você também pode usar este
sed
comando:fonte
Perl, a "serra elétrica do exército suíço" do processamento de texto em linha de comando, também pode fazer isso. A sintaxe é (não por coincidência) bastante semelhante aos exemplos
tr
esed
:ou:
Mas, honestamente, se você não quer gastar um tempo para aprender uma nova linguagem de programação (que é realmente o que awk, Perl e sed e outras ferramentas como elas são) apenas para esta tarefa básica, você pode fazê-lo da seguinte maneira: qualquer editor de texto que suporte pesquisa e substituição:
Abra o arquivo CSV no seu editor de texto favorito (como gedit, kate, mousepad, etc .; até mesmo o Notepad ou Wordpad antigo no Windows podem fazer isso).
Selecione "Pesquisar e substituir" no menu (normalmente encontrado em "Editar", se não houver um menu "Pesquisar" separado).
Entre
_
na caixa de pesquisa e,
na caixa de substituição.Clique em "Substituir tudo".
Repita com
"
na caixa de pesquisa e nada na caixa de substituição.Salve o arquivo.
Agora, se você precisar fazer isso para 100 ou 1000 arquivos, em vez de apenas um, aprender uma nova ferramenta de linha de comando começará a fazer sentido. E, é claro, uma vez que você saiba como usar Perl ou sed ou qualquer outra coisa, economizará muito tempo e esforço com tarefas semelhantes posteriormente. Mas, para apenas um trabalho pontual que você não espera fazer novamente, às vezes uma ferramenta interativa básica como um editor de texto é a solução mais simples.
fonte
Você também pode fazer isso
vim
.Abra o arquivo:,
vim input.csv
depois usevim
a ferramenta de pesquisa avançadas
. Digite colon (:
) para entrar no modo de comando e execute comandos como este:Praticamente os mesmos comandos da resposta do IanC, mas dentro de, em
vim
vez de usarsed
.fonte
Por que não apenas alterar os valores padrão dos valores do separador de entrada e saída
fonte