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
問題は列とMessage
ID 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