簡體   English   中英

在 bash 中,替換 csv 文件中的換行符,除非在行尾

[英]In bash, replace newline in csv files, except when at line's end

我有一個巨大的 csv 文件,大約 500Mb。 字段分隔符是管道字符 (|)。 有些行包含換行符和回車符。 我需要刪除它們,但我不想刪除每行末尾的合法換行符。 我已經嘗試過使用 sed 和 tr ,如其他問題所示,但我最終刪除了所有換行符,這不是我想要的。

示例輸入( ||Yes 行應連接到前一行):

21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849
||Yes||vals
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No|

我的嘗試:

sed -i 's/\r\n//g' myfile.csv

tr -d '\r' < myfile.csv

感謝您的幫助,喬

csv 數據通常具有固定數量的列。

在您的情況下,完整記錄似乎有 25 列。 基於此,您可以使用此 awk 命令來連接損壞的記錄:

awk -F '|' 'NF < 25 {getline s; $0 = $0 s} 1' file

21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849||Yes||vals
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No|

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM