Ich arbeite mit der .csv
Ausgabe dieser SE-Datenabfrage, die so aussieht (nur mit 5022 Einträgen):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(Und es hat Zeilenenden ^M
zwischen [Nummer] und "" Titel ""). Ich brauche es, um so auszusehen:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Ich habe dies in einem bestimmten Texteditor behoben, der recht einfach namenlos bleiben soll, aber ich wollte ein Skript erstellen, damit ich es nicht jedes Mal erneut ausführen muss, wenn die Abfrage aktualisiert wird und andere es verwenden können. Ich habe sed
...
Diese Befehlsreihe funktioniert einwandfrei (obwohl sie möglicherweise ineffizient ist; es handelt sich lediglich um eine Trial-and-Error-Lösung):
# 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
Warum nicht? Nur das ^M
und wird {}
entfernt, und alles andere ist noch da.
#!/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
Ich bin sicher, mein Fehler ist wirklich offensichtlich ...
\r
.jq
brach in der ersten Zeile, in der das Titelfeld einen Doppelpunkt hatte (die erste Zeile). Ich binsed
mir immer noch nicht sicher, warum ich mich hasse, aber ich habe einige der Zitate und\r
in dieser Zeile getötet/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
und schließlich funktioniert es so . Vielen Dank ^ _ ^