ฉันกำลังทำงานกับ.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/,\ /}}
และในที่สุดการทำงานเช่นนี้ ขอบคุณมาก ^ _ ^