Estou trabalhando com a .csv
saída desta consulta de dados SE que se parece com isso (apenas com entradas 5022):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(E possui ^M
finais de linha entre [número] e "" título ""). Eu preciso que fique assim:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Corrigi isso em um determinado editor de texto que permanecerá sem nome com muita facilidade, mas eu queria criar um script para não precisar fazer isso novamente toda vez que a consulta for atualizada e para que outros possam usá-lo. Eu usei sed
...
Essa série de comandos funciona perfeitamente (embora possa ser ineficiente; é apenas uma solução de tentativa e erro):
# Print the ^M and remove them, write to a new file:
cat -v QueryR* | sed 's/\^M//' > QueryNew
# remove all the other junk:
sed -i 's/{//' QueryNew
sed -i 's/}//' QueryNew
sed -i 's/""//g' QueryNew
sed -i 's/^"//' QueryNew
sed -i '/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}' QueryNew
sed -i 's/^\s\+//' QueryNew
sed -i '/^\s*$/d' QueryNew
sed -i 's/^id:\ //' QueryNew
sed -i 's/,\ /,/' QueryNew
sed -i 's/\\//g' QueryNew
Então, por que não faz isso? Apenas o ^M
e {}
são removidos, e todo o resto ainda está lá.
#!/bin/bash
cat -v QueryR* | sed 's/\^M//' > QueryNew
sed -i '{
s/{//
s/}//
s/""//g
s/^"//
/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}
s/^\s\+//
/^\s*$/d
s/^id:\ //
s/,\ /,/
s/\\//g
}' QueryNew
Tenho certeza que meu erro é realmente óbvio ...
\r
.jq
quebrou na primeira linha onde o campo de título tinha dois pontos (a primeira linha). Eu ainda não tenho certeza por quesed
me odeia, mas eu matei algumas das citações e\r
nesta linha/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
e, finalmente, ele funciona como este . Muito obrigado ^ _ ^