Como posso separar a linha abaixo em um arquivo csv:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
abaixo como 2 linhas diferentes:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
Eu tentei usar:
awk -F"[()]" '{print $2}' test.csv
mas não funcionou e perdeu algumas linhas.
Esses dados são na verdade uma consulta SQL e preciso extrair os dados e convertê-los em linhas diferentes usando a vírgula depois) e antes (como separador de linha
Com GNU
sed
(e sua amostra de entrada salva em um arquivo chamado./input
):Isso muda a vírgula em cada
),(
para uma nova linha.AVISO : Se essa sequência de caracteres ocorrer dentro de seus dados reais, ela também será alterada lá.
Você poderia fazer o mesmo em
awk
, mas há pouca ou nenhuma vantagem em usarsed
:A menos que você vá fazer processamento adicional na linha de entrada que requer
awk
recursos, apenas usesed
.Este comando awk pode fazer o que você deseja:
Resultado:
cat test.csv | tr -d "()" | sed 's/goodbye/goodbye\n/g'
sed 's/goodbye/\n/g'
o "g" é fazê-lo com TODAS as linhas e não apenas com a primeira partida.tr
é opcional excluir parênteses (você pode usar tr para traduzi-los para outra coisa sem excluí-los)tentei em python
resultado