Estoy trabajando con la .csv
salida de esta consulta de datos SE que se ve así (solo con 5022 entradas):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(Y tiene ^M
terminaciones de línea entre [número] y "" título ""). Necesito que se vea así:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Lo arreglé en un editor de texto determinado que permanecerá sin nombre con bastante facilidad, pero quería crear un script para no tener que volver a hacerlo cada vez que se actualiza la consulta y para que otros puedan usarla. Yo solía sed
...
Esta serie de comandos funciona perfectamente (aunque puede ser ineficiente; es solo una solución de prueba y error):
# 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
Entonces, ¿por qué no esto? Sólo el ^M
y {}
se eliminan, y todo lo demás es todavía allí.
#!/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
Estoy seguro de que mi error es realmente obvio ...
\r
.jq
se rompió en la primera línea donde el campo del título tenía dos puntos (la primera línea). Todavía no estoy seguro de por quésed
me odia, pero Maté a algunas de las citas y\r
en esta línea/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
y, finalmente, que funciona como este . Muchas gracias ^ _ ^