CSVファイルの列から改行を削除する

CSVファイルの列から改行を削除する

CSVファイルの列に改行文字が表示されます。この列のデータは連続した行にあります。例えば:

ID,CODE,MESSAGE,DATE,TYPE,OPER,CO_ID
12202,INT_SYS_OCS_EX_INT-0000,"""OCSSystemException: HTTP transport error: java.net.ConnectException: Tried all: '1' addresses, but could not connect over HTTP to server: '10.244.166.9', port: '8080'
 failed reasons:
  [0] address:'/10.244.166.9',port:'8080' : java.net.ConctException: Connection refused
""",06-09-2021 05:52:32,error,BillCycle,6eb8642aa4b
20840,,,06-09-2021 16:17:18,response,changeLimit,1010f9ea05ff

問題は列とMessageID 12202にあります。データは三重引用符と連続行にあります。

私の要件は、columnsのデータをMessage複数の行ではなく単一の行に表示する必要があることです。私のetlローダーは埋め込み改行文字を取得できないからです。

ベストアンサー1

CSVがExcelなどのMSツールで作成された場合、以下のようにフィールド中央の「改行文字」はLF、各レコードの末尾にある「改行文字」はCRLFです(「フィールドの末尾のLFに改行」$と入力し、レコードCRLFと入力します。^M$

$ cat -Ev file
ID,Code,Message,date^M$
1244,,"""Exception error : java connection error$
:8080 Connection refused""",01-09-2021^M$

その場合は、レコードがCRLFで終わり、中間レコードLFを空白に置き換えるようにGNU awk(マルチキャラクタRSの場合)に通知できます。

$ awk -v RS='\r\n' '{gsub(/\n/," ")} 1' file
ID,Code,Message,date
1244,,"""Exception error : java connection error :8080 Connection refused""",01-09-2021

POSIX awkのみがあり、CSV用のツールがない場合は、次を参照してください。awkを使用してCSVを効率的に解析する最も強力な方法は何ですかこれを行うには、CRがファイル内の他の場所に表示されない場合は、awkを使用してこれを行うことができます。

$ awk -v RS='\r' 'NR>1{print prev} {sub(/^\n/,""); gsub(/\n/," "); prev=$0}' file
ID,Code,Message,date
1244,,"""Exception error : java connection error :8080 Connection refused""",01-09-2021

おすすめ記事