Je travaille avec la .csv
sortie de cette requête de données SE qui ressemble à ceci (uniquement avec 5022 entrées):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(Et il a des ^M
fins de ligne entre [nombre] et "" titre ""). J'en ai besoin pour ressembler à ceci:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
J'ai corrigé cela dans un certain éditeur de texte qui restera assez facilement sans nom, mais je voulais créer un script pour ne plus avoir à le refaire chaque fois que la requête est actualisée et que d'autres puissent l'utiliser. J'ai utilisé sed
...
Cette série de commandes fonctionne parfaitement (même si elle peut bien être inefficace; ce n'est qu'une solution d'essai et d'erreur):
# 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
Alors, pourquoi ça? Seuls les ^M
et {}
sont supprimés, et tout le reste est toujours 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
Je suis sûr que mon erreur est vraiment évidente ...
\r
.jq
cassé sur la première ligne où le champ de titre avait deux points (la première ligne). Je ne sais toujours pas pourquoised
je me déteste, mais j'ai tué certaines des citations et\r
dans cette ligne/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
et finalement ça fonctionne comme ça . Merci beaucoup ^ _ ^