2016-07-05 94 views
1

我有一个简单的文本文件,我在bash中用shell脚本尝试,但是我一直遇到一些有问题的行。删除双引号内的回车

有给定数量的字段,其中一个字段是自由格式输入。

自由格式字段在我想删除的双引号内有回车符。

格式类似于这样:

"0001","Barker","Bob","Free Form Text Here" 
"0002","Barker","Jane", "Free Form 
Text Here" 

我已经试过,没有运气以下三种解决方案:

  1. tr '\r\n' '' //删除所有回车
  2. sed –e 's/\".*\n"//g' //没有按不工作
  3. awk -v RS='"[^"]*"' -v ORS= '{gsub(/\n/, " ", RT); print $0 RT}' //只返回逗号。

任何想法我可能做错了什么?与解决方案一样,我可以使用sedawk

+0

你在做什么错误是试图解析一个CSV与不涨的工具文件工作。使用*有*可用的CSV解析器的语言(如Python,Perl,Ruby等)。 – chepner

回答

2

它使用perl容易:

perl -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file 

"0001","Barker","Bob","Free Form Text Here" 
"0002","Barker","Jane", "Free Form Text Here" 

要保存更改内嵌使用:

perl -i -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file 
+1

这工作。谢谢! – chipoglesby

+0

当我在一个大文本文件(+ 6MB)上尝试这个时,perl函数的工作方式与2至4行相同。任何想法如何结束? – chipoglesby

+0

尝试不用'-¡'并将输出保存在一个文件中 – anubhava