Я працюю з .csv
результатом цього запиту даних SE, який виглядає приблизно так (лише з 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/,\ /}}
і , нарешті , вона працює , як це . Велике спасибі ^ _ ^