Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 从CSV文件中的单个数据元素中删除CRLF字符_String_Csv_Unix_Awk_Replace - Fatal编程技术网

String 从CSV文件中的单个数据元素中删除CRLF字符

String 从CSV文件中的单个数据元素中删除CRLF字符,string,csv,unix,awk,replace,String,Csv,Unix,Awk,Replace,嗨,我在这里编辑我的问题,要求略有改变,其中CSV文件只有LF开始。但是,CSV文件也可以在双引号内的元素之间包含LF。我们希望保留双引号内的LF,并用CRLF替换行末尾的LF。 因此,如果我的源文件如下所示: enter code here Date,Open,High,Low,Close,comments,Remark 5-Dec-16,8088.75,8141.9,8056.85,8128.75,"TEST1 <LF> TEST2 <LF> with NL",re

嗨,我在这里编辑我的问题,要求略有改变,其中CSV文件只有LF开始。但是,CSV文件也可以在双引号内的元素之间包含LF。我们希望保留双引号内的LF,并用CRLF替换行末尾的LF。 因此,如果我的源文件如下所示:

enter code here

Date,Open,High,Low,Close,comments,Remark
5-Dec-16,8088.75,8141.9,8056.85,8128.75,"TEST1 <LF>
TEST2 <LF>
with NL",remark<LF>
6-Dec-16,8153.15,8178.7,8130.85,8143.15,AAAA,remark<LF>
7-Dec-16,8168.4,8190.45,8077.5,8102.05,BBBB,remark<LF>
8-Dec-16,8152.1,8256.25,8151.75,8246.85,"TEST1<LF>
TEST with NL",remark<LF>
9-Dec-16,8271.7,8274.95,8241.95,8261.75,CCCC,remark<LF>

Date,Open,High,Low,Close,comments,Remark
5-Dec-16,8088.75,8141.9,8056.85,8128.75,"TEST1 <LF>
TEST2 <LF>
with NL",remark<CRLF>
6-Dec-16,8153.15,8178.7,8130.85,8143.15,AAAA,remark<CRLF>
7-Dec-16,8168.4,8190.45,8077.5,8102.05,BBBB,remark<CRLF>
8-Dec-16,8152.1,8256.25,8151.75,8246.85,"TEST1<LF>
TEST2 with NL",remark<CRLF>
9-Dec-16,8271.7,8274.95,8241.95,8261.75,CCCC,remark<CRLF>

enter code here
在此处输入代码
日期、开盘、高点、低点、收盘、评论、备注
5-Dec-168088.758141.98056.858128.75,“测试1
测试2
加上“NL”,备注
6-Dec-168153.158178.78130.858143.15,AAAA,备注
7-Dec-168168.48190.458077.58102.05,BBBB,备注
8-Dec-168152.18256.258151.758246.85,“测试1
用NL测试”,备注
9-Dec-168271.78274.958241.958261.75,中国交建,备注
日期、开盘、高点、低点、收盘、评论、备注
5-Dec-168088.758141.98056.858128.75,“测试1
测试2
加上“NL”,备注
6-Dec-168153.158178.78130.858143.15,AAAA,备注
7-Dec-168168.48190.458077.58102.05,BBBB,备注
8-Dec-168152.18256.258151.758246.85,“测试1
带有NL的测试2”,备注
9-Dec-168271.78274.958241.958261.75,中国交建,备注
在这里输入代码
谢谢你的帮助

谢谢,
Chandan

你正在寻找的机会是:

awk -v RS='\r\n' '{gsub(/[\r\n]+/," ")}1' file
但是如果没有关于
\r
\n
在您的输入中出现的位置的详细信息,这只是一个猜测。上面使用GNU awk来表示多字符,除了用空格替换每个字段内部的回车链和/或换行符外,还可以将新行从
\r\n
(Windows样式)转换为
\n
(UNIX样式),以便从那时起更容易地使用它们执行任何其他操作


另请参见如何使用awk处理CSV。awk中的一个小状态机:使用双引号作为字段分隔符,并根据字段数进行操作:

awk -F '"' '
    partial {$0 = partial OFS $0; partial = ""} 
    NF % 2 == 0 {partial = $0; next} 
    {print}
' file

最好使用适当的CSV解析器来处理引号字段中的换行符。Perl有一个:

perl -MText::CSV -e '
    $csv = Text::CSV->new({ binary => 1 }); 
    while ($row = $csv->getline(STDIN)) {
        $row = [map {s/\n+/ /g; $_} @$row]; 
        $csv->say(STDOUT, $row)
    }
' < file.csv

请在文章中使用示例代码标记。您是否试图删除回车符(
\r
)或换行符(
\n
)或换行符(
\n
在UNIX上或
\r\n
在Windows上)?如果它只是其中一个字符,您希望它在整行中删除还是仅在特定字段中删除?行是否以
\r\n
结尾,但字段可以包含
\n
\r
?请显示这些内容在您的输入中出现的位置、您希望它们在输出中出现的位置以及您迄今为止所做的尝试,并使用编辑器
{}
按钮格式化输入、输出和代码。另外,请参见。它很复杂,源在每个元素中都有\n,并且在行尾有a/n。我们希望在元素处保留/n,并在行末将/n替换为/r/n。csV文件在“”中有一段时间是一个\n,有时是多个\n,这些/n需要保留。下面的第一行有2个\n文档ID、创建日期、请求者、PO创建日期、上次更新日期、响应代码、响应消息、解析527612,03/15/18,Jin LI,03-15-2018,03/15/18,“成功信息”,“IDOC 00000000 49823820 IPaaS:JobID:eab75159c2f5”,第527615,03/15/18号,库比曼,03-15-2018,03/15/18,“成功信息”,“IDOC系统IPaaS:369acd6”,No
/n
是一个由两个字符组成的字符串,一个正斜杠字符(
/code>)然后是字母
n
。您的行不会以该字母结尾,否则在您发布的示例中会看到该字母。我怀疑您的行实际上以
\n
\r\n
结尾(希望是后者,因为这样可以更容易地删除独立的
\n
的中场)像我听说过的所有其他CSV一样-使用
od-c文件检查,确保您的问题包括该文件的输出,因为这将提供正确的信息。您无法在注释中显示格式化文本,因此不要尝试将所有相关信息放入问题中。这很复杂,每个元素中都有\n源,并且在行尾有一个/n。我们希望在元素处保留/n,并在行末将/n替换为/r/n。csV文件在“”中有时有一个\n,有时有多个\n,这些/n需要保留。下面的第一行有2个\n文档ID、创建日期、请求者、PO创建日期、上次更新日期、响应代码、响应消息、解析527612,03/15/18,Jin LI,2018年3月15日,2018年3月15日,“成功信息”,“IDOC 00000000 49823820 IPaaS:JobID:eab75159c2f5”,编号527615,03/15/18,库比曼,2018年3月15日,2018年3月15日,“成功信息”,“IDOC系统IPaaS:369acd6”,不复杂,源在每个元素中都有\n,并且在行尾有a/n。我们希望在元素处保留/n,并在行末将/n替换为/r/n。csV文件在“”中有时有一个\n,有时有多个\n,这些/n需要保留。下面的第一行有2个\n文档ID、创建日期、请求者、PO创建日期、上次更新日期、响应代码、响应消息、解析527612,03/15/18,Jin LI,2018年3月15日,2018年3月15日,“成功信息”,“IDOC 00000000 49823820 IPaaS:JobID:eab75159c2f5”,编号527615,03/15/18,库比曼,2018年3月15日,2018年3月15日,“成功信息”,“IDOC系统IPaaS:369acd6”,不复杂,源在每个元素中都有\n,并且在行尾有a/n。我们希望在元素处保留/n,并在行末将/n替换为/r/n。csV文件在“”中有时有一个\n,有时有多个\n,这些/n需要保留。下面的第一行有2个\n文档ID、创建日期、请求者、PO创建日期、上次更新日期、响应代码、响应消息、解析527612,03/15/18,金丽,2018年3月15日,2018年3月15日,“成功信息”,“IDOC 00000000 49823820 IPaaS:JobID:eab75159c2f5”,编号527615,2018年3月15日,2018年3月15日,“成功信息”,“IDOC系统IPaaS:369acd6”,编号
ruby -rcsv -e '
  CSV.parse( readlines.join "" ).each {|row|
    puts CSV.generate_line( row.collect {|elem| elem.gsub /\n+/, " "} )
  }
' file