我有一個包含以下形式的行的檔案:
產品、品牌、成本、評論、位置、評級
例如,檔案是這樣的:
Computer, "Apple, Lenovo", 500, "Can be fixed", Berlin, 5
Computer, "Apple, Lenovo", 670, "Can be fixed, need new screen", Berlin, 3
Phone, "Samsung, Unknown", 670,"Touch is dead, Screen is dead", Berlin, 1
TV, "Samsung, Unknown", 670,"Antenna dead, light issues", Frankfurt, 2
我想將分隔符“,”更改為新字符“|” 例如,我想要這個:
Computer| "Apple, Lenovo"| 500| "Can be fixed"| Berlin| 5
Computer| "Apple, Lenovo"| 670| "Can be fixed, need new screen"| Berlin| 3
Phone| "Samsung, Unknown"| 670| "Touch is dead, Screen is dead"| Berlin| 1
TV| "Samsung, Unknown"| 670| "Antenna dead, light issues"| Frankfurt| 2
我試過使用 sed 命令,例如 sed 's/,/|/g' prod.csv > output.csv
但它也會更改引號之間的逗號!我想更改不在引號之間而僅在引號之間的每個逗號。
我想堅持使用像 sed 或 tr、grep、cut 等通用工具,而不是像 csvkit 這樣的 csv 工具,因為我以后不會使用 csv 檔案。
是否可以更改我的命令來實作這一目標?我正在尋找類似的東西prod.csv | (filter out the commas between quotes) | tr "," "|" 明白我的意思嗎?
我在這方面很糟糕,非常感謝您的幫助
最好的事物,
uj5u.com熱心網友回復:
如果您必須使用sed,那么這個適用于您的示例資料但可能不適用于現實生活資料的脆弱解決方案可能會有所幫助。?。
$ sed 's/,/|/;s/,/|/;s/,/|/;s/\(.*"\).\([^,]*\).\(.*\)/\1|\2|\3/' input_file
Computer| "Apple"| 500| "Can be fixed"| Berlin| 5
Computer| "Apple"| 670| "Can be fixed, need new screen"| Berlin| 3
Phone| "Samsung"| 670|"Touch is dead, Screen is dead"| Berlin| 1
TV| "Samsung"| 670|"Antenna dead, light issues"| Frankfurt| 2
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed -E ':a;s/^([^"]*("[^",]*")*[^"]*"[^,"]*),/\1\n/;ta;y/,\n/|,/' file
將,雙引號內的 's轉換為換行符,然后將,'s轉換為|'s 并將\n's 轉換為,'s。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345826.html
上一篇:Python表白代碼:“ 星光月夜煙花皆歸你,我也歸你”(滿天煙花盛開、附番外玫瑰)
下一篇:為字串添加多個后綴
