2015-02-24 111 views
3

我的bash腳本正在從具有逐行條目的file1.txt粘貼到CSVformat中。例如:bash粘貼不保留換行符

FILE1.TXT包含文本:

John 
21-2-2015 
some city 
"108 Brent Street 
Ridgewoods 
sometown 
somecountry" 

一個CSV上傳轉換後的輸出應該是這樣的:

John,21-2-2015,some city,"108 Brent Street 
Ridgewoods 
sometown 
somecountry" 

但是我的代碼,將其轉換爲:

John,21-2-2015,some city,"108 Brent Street Ridgewoods sometown somecountry" 

我想保留換行符。

我的代碼:

paste -sd, file1.txt > file2.csv 

回答

1

你可以試試下面的Perl命令。

$ perl -0777pe 's/(?s)"[^"]*"(*SKIP)(*F)|\n(?!$)/,/g' file 
John,21-2-2015,some city,"108 Brent Street 
Ridgewoods 
sometown 
somecountry" 

添加-i參數以保存對該文件所做的更改。

+1

你先生..的FPAT功能保存了我的日子確實如此。 – user1659329 2015-02-24 15:47:45

1

你可以使用GNU awk

cat main.awk 
BEGIN { 
    FPAT = "([^\n]+)|(\"[^\"]+\")" 
    OFS="," 
    RS="" 
    ORS="\n" 
} 
{ $1=$1; print 
} 
awk -f main.awk <datafile 
John,21-2-2015,some city,"108 Brent Street 
Ridgewood 
sometown 
somecountry"