我目前正在努力清理使用sed或awk或腳本使用包含csv分隔符和字段分隔符的字段自動生成的csv文件。如何清潔csv文件,其中字段包含csv分隔符和分隔符
源軟件沒有設置可以改善情況。
格式的CSV格式:
"111111";"text";"";"text with ; and " sometimes "; or ;" multiple times";"user";
幸運的是,CSV是「好」的格式,出口軟件只是不逃避或更換從田間地頭「禁止」字符。
在過去的幾天中,我試圖提高我對正則表達式的瞭解,並發現表達式來清理文件,但是我失敗了。
我設法到目前爲止做:
正則表達式來查找場(我想找到的領域和進行內部更換,但我沒有找到一個方法來做到這一點)
(?:";"|^")(.*?)(?=";"|";\n)
找到分號的正則表達式,如果分號是字段的最後一個字符只在每個字段中找到一個,則不起作用。
(?:^"|";")(?:.*?)(;)(?:[^"\n].*?)(?=";"|";\n)
正則表達式來尋找雙引號,似乎挑線的第一個雙引號在網上正則表達式測試
(?:^"|";")(?:.*?)[^;](")(?:[^;].*?)(?=";"|";\n)
我想在田裏每個字符之間增加空間然後孤獨搜索的半冒號和雙引號,然後刪除單個空間,但我不知道這是否可能,反正看起來像一個糟糕的解決方案。
感謝您的回答。 很遺憾,我無法更改軟件的輸出,也無法訪問它的數據庫。並且字段是由用戶鍵入的註釋,其中沒有模式。 我需要加載這個數據到一個mysql數據庫,我使用「加載數據infile」函數,它無法處理這些記錄。 –
你是如何得到這些數據的?您絕對可以請求負責處理數據的人員使用其他分隔符(如\ t)或使用轉義字符來確保格式正確。您必須簡單地通知他們數據不是可分析的。 – Aditya
只有導出的行和列完全無法控制csv格式。我會更多地關注awk函數。從你的鏈接中我知道你可以使用正則表達式作爲awk的字段分隔符,我認爲只有一個字符是可能的。再次感謝。 –