我有一个CSV文档,其中有47001行。但是,当我在Excel中打开它时,只有31641行。
我知道47001是正确的行数;这是数据库表的导出,我知道它的大小为47001。此外:wc -l my.csv
返回47001。
所以,Excel的解析失败。我怀疑本文档中某处有一些时髦的控制或空格字符。
我如何找出某些文档中使用的各种字符?
例如,考虑此输入文件:ABCAAAaaan
。
我希望文件中使用的字符字母为: ABCan
。
也许如果我们压缩它,我们可以以某种方式阅读霍夫曼树?
我怀疑将UTF-8角色品种与ASCII角色品种进行比较是教育性的。例如:Excel可能会在ASCII中解析多字节字符,因此将某些字节解释为控制编码点。
如果您在linux上,我们去这里(除了linux外,背后的逻辑可能是相同的,我给出了命令):
sed 's/./&n/g' | sort -u | tr -d 'n'
发生了什么: - 首先用字母替换所有字母,然后是" n" [新线] - 然后对所有caracter进行排序,然后打印UNIQ出现 - 删除所有" n"
然后输入文件:
ABCAAAaaa
将变成:
A
B
C
A
A
A
a
a
a
排序之后:
a
a
a
A
A
A
A
B
C
然后在uniq:
之后A
B
C
a
最终输出:
aABC
您可以从原始文件中删除一些列,而这些列不太可能通过通过被解析并再次写出的周期来更改。G。纯文本列,例如名称或数字。名字很棒。然后让此文件通过周期并将其与原始文件进行比较:
这是代码:
cut -d, -f3,6,8 > columns.csv
这假定第3、6和8列是名称列,并且逗号是分离器。根据您的输入文件调整这些值。使用单列也可以。
现在致电Excel,解析文件columns.csv
,再次将其写出为CSV文件columns2.csv
(当然具有相同的分离器)。然后:
diff columns.csv columns2.csv | less
诸如meld
而不是diff
之类的工具也可能方便地分析差异。
这将向您显示哪些线路经历了→解析→转储周期的更改。希望它只会影响您要寻找的线。