2017-03-09 63 views
0

我有一個帶有47001行的CSV文檔。但是,當我在Excel中打開它時,只有31641行。在文本文檔中查找各種字符

我知道47001是正確的行數;它是一個數據庫表的輸出,其大小我知道是47001.另外:wc -l my.csv返回47001.

因此,Excel的解析失敗。我懷疑這個文檔中有某些時髦的控件或空白字符。

如何找出某些文檔中使用的各種字符?

例如,考慮以下輸入文件:ABCAAAaaa\n
我期望文件中使用的字符的字母表是:ABCa\n

也許如果我們壓縮它,我們可以以某種方式讀取Huffman Tree

我懷疑它會比較UTF-8字符與ASCII字符的變化。例如:Excel可能會解析ASCII中的多字節字符,並將一些字節解釋爲控制碼點。

+2

以與輸入相同的CSV格式再次導出Excel表格。使用diff比較結果與原始值。您可能首先要發送兩個版本:'sed's/[^ a-zA-Z0-9 _] * // g''這會刪除所有非字母數字字符,因此略有不同的格式無關緊要。 – Alfe

+0

你知道如何編碼你的'csv'嗎? UTF8? ASCII? ISO-8859-1? UTF16等? – jm666

+0

@Alfe不幸的是,Excel的CSV輸出已經重新格式化了每個日期和每個金額,所以差異將每一行視爲已經改變。然而,這sed給了我一個想法。我能夠刪除所有字母數字字符(加上我期望在日期或UUID中找到的其他字符):'sed's/[a-zA-Z0-9 _ \ - \:,\。 - \「] * // g' Birchlabs

回答

1

在這裏,我們去,如果你是在Linux(背後的邏輯可能是相同的,但所有的Linux我給的命令):

sed 's/./&\n/g' | sort -u | tr -d '\n' 

發生了什麼: - 第一替代由字母的所有字母后跟由 「\ n」 個[新線] - 然後排序所有卡拉科特和打印uniq的出現 - 刪除所有的 「\ n」 個

然後輸入文件:

ABCAAAaaa 

意志變成了:

A 
B 
C 
A 
A 
A 
a 
a 
a 

排序後:

的uniq後
a 
a 
a 
A 
A 
A 
A 
B 
C 

然後:

A 
B 
C 
a 

最終輸出:

aABC 
+0

這是如何回答這個問題的:__ How do you like this?我可以找出一些文件中使用的各種字符嗎?__ – jm666

+0

那麼,這將列出文件中使用的所有不同的字符,但也許我誤解了這個問題:x – kaldoran

+2

當然,它可以打印ascii '。但是,如果輸入是utf8編碼,可能還有許多其他的「控制字符」(比如'\ r'),比在這裏可能會出現「組合標記」等等,但是可以 - 作爲起始解決方案... – jm666

1

可以削減原廠出來l通過傳遞被解析和寫出的循環來記錄一些不可能被改變的列, 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的工具也可以得心應手地分析差異。

這將告訴你哪些行經歷了→parse→dump週期的變化。希望它只會影響你正在尋找的路線。