2017-09-23 67 views
0

我想刪除列數據中的所有不可打印的換行符。無法刪除用雙引號括起來的列中的回車符和換行符

我用雙引號括住了所有列,以便輕鬆地刪除列中出現的新行字符,並在每行結束後忽略記錄分隔符。

說,我有4列用逗號分隔,並在文本文件中用引號括起來。 我試圖刪除\ n和\ r字符,只有當它出現在雙引號

目前使用的裝飾件之間,但它刪除每一個換行符,並使它成爲序列文件沒有任何記錄分隔符。

tr -d '\n\r' <in.txt> out.txt 

樣本數據:

「1」, 「試驗\ n

樣品」, 「數據」, 「COL4」 \ n

「2 \ n

「,」Test「,」Sample「,」data「\ n

「3」, 「薩姆\ n

PLE」, 「TE \ n

ST」, 「數據」 \ n

預期輸出:

「 1「,」testSample「,」data「,」col4「\ n

」2「,」Test「,」Sample「,」data「\ n

「3」,「Sample」,「test」,「data」\ n

有什麼建議嗎?在此先感謝

+1

用四個空格前綴代碼/數據。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus

+1

這個問題描述沒有意義。爲什麼你的「預期輸出」在'「3」'和'「Sample」之間加逗號?那些東西是什麼?數據中是否有字面反斜槓? – melpomene

+0

嗨,逗號之間只是一個錯字,請忽略。 而'\ n'只是表示一行的結尾,並且不能刪除位於所有列末尾的\ n字符。 –

回答

0

隨着GNU sed的

sed ':a;N;$!ba;s/\("[^\n\r]*\)[\n\r\]*\([^\n\r]*\"\)/\1\2/g' file 

this post的換行符替換,而不封閉"

0

你可以試試awk解決方案,讓我知道這是否對你有幫助。

awk '{gsub(/\r/,"");printf("%s%s",$0,$0~/,$/?"":RS)}' Input_file 

輸出如下。

"1","test","Sample","data"\n 
"2","Test" \n 
"3","Sample" 

說明:使用printf打印線,因此,使用2%S(它被用於打印的字符串中printf)這裏,第一個%s簡單地打印當前行,第二個將檢查是否有行以逗號(,)結尾,如果是,則不會打印任何內容,它將打印新行。在printf之前添加gsub(/\r/,"")以防止您想要刪除回車並希望獲得您所顯示的預期輸出。

編輯:由於你的帖子標題建議刪除回車,所以如果你想刪除回車然後你可以嘗試下面。雖然你應該清楚地提到你的問題。

tr -d '\r' <Input_file> temp_file && mv temp_file Input_file 

以上將從您的Input_file中移除carriage字符並將其保存在同一個Input_file中。

+0

你是對的,但只有它存在於雙引號之間。 請檢查我現在編輯的問題:) –

+0

你可以試試我的awk解決方案,添加gsub(它將處理所有的回車不僅僅是特定的回車,除非你想保留回車,那麼我們必須考慮另一種選擇)我在評論中提到並讓我知道,它應該幫助你。讓我知道那是怎麼回事。 – RavinderSingh13

0

這裏是一個可能的解決方案:

perl -pe 'if (tr/"// % 2) { chomp; $_ .= <>; redo; }' 

如果當前行有不平衡的報價(即奇數"),它必須結束在一個領域的中間,所以我們的Chomp了換行,追加下一個輸入行,然後重新啓動循環。

相關問題