Tôi đang làm việc với .csv
đầu ra của truy vấn dữ liệu SE này trông giống như thế này (chỉ với 5022 mục):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(Và nó có ^M
kết thúc dòng giữa [số] và "" tiêu đề ""). Tôi cần nó để trông như thế này:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Tôi đã sửa lỗi này trong một trình soạn thảo văn bản nhất định mà vẫn không có tên khá dễ dàng, nhưng tôi muốn tạo một tập lệnh để tôi không phải làm lại mỗi lần truy vấn được làm mới & để người khác có thể sử dụng nó. Tôi đã sử dụng sed
...
Chuỗi lệnh này hoạt động hoàn hảo (mặc dù nó có thể không hiệu quả; nó chỉ là một giải pháp thử và lỗi):
# 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
Vậy tại sao không? Chỉ có ^M
và {}
được gỡ bỏ, và mọi thứ khác vẫn còn đó.
#!/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
Tôi chắc chắn rằng sai lầm của tôi thực sự rõ ràng ...
\r
.jq
đã phá vỡ dòng đầu tiên trong đó trường tiêu đề có dấu hai chấm (dòng đầu tiên). Tôi vẫn không chắc tại saosed
ghét tôi, nhưng tôi đã giết một số trích dẫn và\r
trong dòng này/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
và cuối cùng nó hoạt động như thế này . Cảm ơn rất nhiều ^ _ ^