无法删除用双引号括起来的列中的回车符和换行符
我想删除列数据中的所有不可打印的换行符。无法删除用双引号括起来的列中的回车符和换行符
我用双引号括住了所有列,以便轻松地删除列中出现的新行字符,并在每行结束后忽略记录分隔符。
说,我有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
有什么建议吗?在此先感谢
随着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中。
你是对的,但只有它存在于双引号之间。 请检查我现在编辑的问题:) –
你可以试试我的awk解决方案,添加gsub(它将处理所有的回车不仅仅是特定的回车,除非你想保留回车,那么我们必须考虑另一种选择)我在评论中提到并让我知道,它应该帮助你。让我知道那是怎么回事。 – RavinderSingh13
这里是一个可能的解决方案:
perl -pe 'if (tr/"// % 2) { chomp; $_ .= <>; redo; }'
如果当前行有不平衡的报价(即奇数"
),它必须结束在一个领域的中间,所以我们的Chomp了换行,追加下一个输入行,然后重新启动循环。
用四个空格前缀代码/数据。请看[编辑帮助](http://stackoverflow.com/editing-help)。 – Cyrus
这个问题描述没有意义。为什么你的“预期输出”在'“3”'和'“Sample”之间加逗号?那些东西是什么?数据中是否有字面反斜杠? – melpomene
嗨,逗号之间只是一个错字,请忽略。 而'\ n'只是表示一行的结尾,并且不能删除位于所有列末尾的\ n字符。 –