以下是我在csv中的示例数据。
$('form').submit(function(e){
$('#output').hide();
e.preventDefault();
// Or with: return false;
在上面的字段中,我有好的数据以及垃圾数据和分割到新行的行。 我想删除这个特殊字符(由于这个特殊的字符和空格,行被移动到下一行)以及将此分割线合并为一行。
目前我正在使用类似下面的内容,这需要花费大量时间:
tr -cd'\ 11 \ 12 \ 15 \ 40- \ 176'| gawk -v RS =''''NR%2 == 0 {gsub(/ \ n /,“”)} {printf(“%s%s”,$ 0,RT)}'MY_FILE.csv> MY_FILE。 csv.tmp
在文件中附上原始数据的屏幕截图。
答案 0 :(得分:0)
您可以使用
tr -c '[:print:]\r\n' ' ' <bad.csv >better.csv
摆脱不可打印的角色......
sed '/[^"]$/ { N ; s/\n// }' better.csv | sed '/[^"]$/ { N ; s/\n// }' >even_better.csv
将覆盖大多数情况(即在随机引用后无法捕获额外的换行符)
- Samson Scharfrichter
答案 1 :(得分:0)
传统的unix工具(如awk
)可能遇到的一个问题是,虽然它支持字段分隔符,但它不支持引号+逗号样式的CSV格式,如截图或示例数据中的格式。 Awk可以使用字段分隔符分隔记录中的字段,但它在字段周围没有引用盔甲的概念,因此嵌入的逗号也被视为字段分隔符。
如果您对此感到满意,因为您的纯文本数据都不包含逗号,也不包含任何“不可打印”的数据。数据包括偶然的逗号,然后你可以只考虑引号作为字段的一部分。毕竟,他们是可打印的角色。
如果您想将多行记录加入一行并删除任何不可打印的字符,则以下awk one-liner可能会执行此操作:
awk -F, 'NF<10{$0=last $0;last=$0} NF<10{next} {last="";sub(/[^[:print:]]/,"")} 1' inputfile
请注意,如果换行符位于最后一个逗号和最后一个字段的内容之间,则除了,因为从awk的角度来看,空字段有效并且&#39 ; s无需加入。如果这个逻辑与您的数据不匹配,那么您将获得另一个有趣的编程任务。 :)
让我们分解awk脚本,看看它的作用。
awk -F, ' # Set comma as the field separator...
NF<10 { # For any lines that have fewer than 10 fields...
$0=last $0 # Insert the last "saved" line here,
last=$0 # and save the newly joined line for the next round.
}
NF<10 { # If we still have fewer than 10 lines,
next # repeat.
}
{
sub(/[^[:print:]]/,"") # finally, substitute an empty string
} # for all non-printables,
1' inputfile # And print the current line.