无法删除用双引号括起来的列中的回车符和换行符

问题描述:

我想删除列数据中的所有不可打印的换行符。无法删除用双引号括起来的列中的回车符和换行符

我用双引号括住了所有列,以便轻松地删除列中出现的新行字符,并在每行结束后忽略记录分隔符。

说,我有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字符。 –

随着GNU sed的

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

this post的换行符替换,而不封闭"

你可以试试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

这里是一个可能的解决方案:

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

如果当前行有不平衡的报价(即奇数"),它必须结束在一个领域的中间,所以我们的Chomp了换行,追加下一个输入行,然后重新启动循环。