bash粘贴不保留换行符

bash paste does not retain line breaks

我的 bash 脚本是从 file1.txt 粘贴的,其中有逐行条目到 CSV 格式。例如:

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

您可以试试下面的 Perl 命令。

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

添加 -i 参数以保存对该文件所做的更改。

您可以使用 GNU 的 FPAT 功能 awk

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