Sto lavorando con l' .csv
output di questa query di dati SE che assomiglia a questo (solo con 5022 voci):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(E ha ^M
terminazioni di riga tra [numero] e "" titolo ""). Ho bisogno che assomigli a questo:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Ho risolto questo problema in un determinato editor di testo che rimarrà abbastanza facilmente senza nome, ma volevo creare uno script in modo da non doverlo rifare ogni volta che la query viene aggiornata e così altri possono usarla. Ho usato sed
...
Questa serie di comandi funziona perfettamente (sebbene possa essere inefficiente; è solo una soluzione di prova ed errore):
# 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
Quindi, perché non questo? Vengono rimossi solo ^M
e {}
rimossi, e tutto il resto è ancora 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
Sono sicuro che il mio errore è davvero evidente ...
\r
.jq
si interruppe sulla prima riga dove il campo del titolo aveva due punti (la prima riga). Non sono ancora sicuro perchésed
mi odia, ma ho ucciso alcune delle citazioni e\r
in questa linea/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
e, infine, funziona come questo . Grazie mille ^ _ ^