Text-Processing

Cygwin下csv文件水平合併問題

  • June 2, 2015

我有兩個 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

引用自:https://unix.stackexchange.com/questions/206918