मैं इस एसई डेटा क्वेरी के .csv
आउटपुट के साथ काम कर रहा हूं जो इस तरह दिखता है (केवल 5022 प्रविष्टियों के साथ):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(और इसमें ^M
[संख्या] और "" शीर्षक "" के बीच की रेखा अंत है। मुझे इसे इस तरह देखना चाहिए:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
मैंने इसे एक निश्चित टेक्स्ट एडिटर में तय किया, जो काफी आसानी से बेकार हो जाएगा, लेकिन मैं एक स्क्रिप्ट बनाना चाहता था, ताकि मुझे हर बार फिर से क्वेरी रिफ्रेश होने पर ऐसा न करना पड़े, ताकि दूसरे इसका इस्तेमाल कर सकें। मैंने इस्तेमाल किया sed
...
आदेशों की यह श्रृंखला पूरी तरह से काम करती है (हालाँकि यह अच्छी तरह से अक्षम हो सकती है; यह सिर्फ एक परीक्षण और त्रुटि समाधान है):
# 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
तो, यह क्यों नहीं करता है? केवल ^M
और {}
हटा दिया जाता है, और बाकी सब कुछ अभी भी है।
#!/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
मुझे यकीन है कि मेरी गलती वास्तव में स्पष्ट है ...
\r
।jq
पहली पंक्ति जहां शीर्षक क्षेत्र में एक बृहदान्त्र (पहली पंक्ति) थी, पर टूट गया। मुझे अब भी यकीन नहीं है किsed
मुझसे नफरत क्यों की जाती है, लेकिन मैंने कुछ उद्धरण और\r
इस पंक्ति को मार दिया है/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
और अंत में यह इस तरह से काम करता है । बहुत बहुत धन्यवाद ^ _ ^