Este comando do awk pode fazer o que você quiser:
awk -F '),' '{ print $1")" "\n" $2}' source.csv
Resultado:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
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 duas 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 eu preciso extrair os dados e convertê-los em linhas diferentes usando a vírgula após) e antes (como separador de linha
Este comando do awk pode fazer o que você quiser:
awk -F '),' '{ print $1")" "\n" $2}' source.csv
Resultado:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
Com GNU sed
(e sua entrada de amostra salva em um arquivo chamado ./input
):
$ sed -e 's/),(/)\n(/g' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
Isso altera 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ê pode fazer o mesmo em awk
, mas há pouca ou nenhuma vantagem sobre o uso de sed
:
$ awk 'gsub(/\),\(/,")\n(",$0)' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
A menos que você faça mais processamento na linha de entrada que requer recursos awk
, use apenas sed
.