Text-Processing
Cygwin下csv文件水平合併問題
我有兩個 csv 文件:
test1.csv 1 2 3 4 test2.csv 6 7 8 9
我想水平合併這兩個文件。為此,我使用
paste -d , test1.csv test2.csv > paste.csv
如果我在記事本中打開此文件,它看起來是正確的,即paste.csv 1,6 2,7 3,8 4,9
但是,如果我在 Excel 中載入 paste.csv,它看起來像
我錯過了什麼?提前致謝!
PS這可能無關緊要,但我在Windows上並使用Cygwin。
更新:當我在記事本中打開 paste.csv 時,我發現有些奇怪。數字和逗號之間似乎有一個看不見的字元。例如,如果我將游標放在 1 和 之間,然後按退格鍵,則什麼也不會發生。當我再次按退格鍵時, 1 按預期刪除。如果我刪除所有這些不可見的字元,然後在 excel 中載入 paste.csv,那就正確了!
Unix用字元 LF表示換行符
\n
(換行 = =^J
= 十進制 = 012 八進制 = 0x0a 十六進制)。Windows 用兩個字元序列 CR、LF 表示換行符(CR = 輸入 =\r
=^M
= 十進制 = 015 八進制 = 0x0d 十六進制)。當一個 Windows 文本文件由一個 Unix 實用程序處理時,每一行都以一個虛假的 CR 字元結束。Cygwin 實用程序是 Linux 工具的直接埠。它們不專門處理 Windows 文本文件,因此 CR 字元最終會作為行內容。在您粘貼的文件中,每個逗號前都有一個 CR。
您可以先將文件轉換為 Unix 格式:
dos2unix *.csv paste -d , test1.csv test2.csv > paste.csv
或者您可以刪除 CR 字元。在這裡,它可以從線路內部刪除它們;其他一些文本操作需要在處理之前將其刪除。
paste -d , test1.csv test2.csv | tr -d '\r' > paste.csv