มีไฟล์ CSV ดังนี้:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
และมองหาผลลัพธ์เช่น:
HEADER
first, column|second "some random quotes" column|third ol' column
กล่าวอีกนัยหนึ่งคือการลบ "FOOTER" เครื่องหมายคำพูดในจุดเริ่มต้นจุดสิ้นสุดและรอบ ๆ |
จนถึงตอนนี้รหัสนี้ทำงาน:
sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe
ในขณะที่คุณเห็นปัญหาคือมันสร้างไฟล์พิเศษ 4 ไฟล์
นี่เป็นอีกวิธีการหนึ่งที่มีเป้าหมายที่จะไม่สร้างไฟล์เพิ่มเติมและทำสิ่งเดียวกันในสคริปต์เดียว มันใช้งานไม่ได้ดีมาก
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
จะไม่ทำงานกับสิ่งนั้นด้วย csv แบบง่าย ๆ เท่านั้น ใช้ภาษาการเขียนโปรแกรมกับไลบรารีที่สามารถจัดการไฟล์ CSV จริง (Python / Perl / Ruby)