2015-04-06 15 views
5

Tôi có một vấn đề khi tôi cố gắng để loại bỏ^M từ một csvtháo^M từ một tập tin csv

Khi tôi gõ vim hoặc vi file.csv, tôi nhận được

A, TK,2015-04-06,14.4^M,14.7,10.0,0.0,54.0^M,13.3^M,135.0^M,33.8 
B, NV,2015-04-06,14.4^M,14.7,5.4,0.0,47.0^M,14.8^M,97.0^M,31.3 

Tôi đã cố gắng với

tr -d '^M' <file.csv> file2.csv 

Nhưng nó không loại bỏ, cũng với sed.

+3

'tr -d '\ r' < file.csv > file2.csv'? –

+0

Vâng Etan, cảm ơn, bây giờ tôi có thể xóa^M –

+0

Bạn nhập^M như thế nào? Bạn đã sử dụng char^theo sau là char M (sai), hoặc bạn đã sử dụng CTRL-V CTRL-M (đúng)? –

Trả lời

1

Bạn có thể thử:

perl -pE 's/(\^M|\r)//g' <file>file2 

nên loại bỏ

  • các đen^M - chuỗi của hai nhân vật ^M
  • ^M như \r nhân vật.
+0

Tôi đã sử dụng 'perl -pE 's/(\^M | \ r) // g'/var/tmp/screwed_csv_file.csv' và sau đó tôi có một tệp CSV chính xác. – YumYumYum

+0

Sau khi thực hiện điều đó, tôi có thể sử dụng http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html#option_mysqlimport_columns và 'LOAD DATA'. Liệu nó không có nghĩa là MySQL có BUG? họ nên ghi lại nó hay nên được coi là BUG? tôi mất 4 giờ để tìm hiểu. – YumYumYum

7

Bạn có thể sử dụng lệnh dos2unix được cung cấp để thực hiện điều đó.

Sử dụng GNU/sed chỉ để cho vui:

sed -i -e "s/\r//g" file 

Sử dụng tr:

tr -d '\r' <file1 >file2 
3

Ở đâu bạn có tập tin đó từ đâu? Dường như tệp System X cũ từ máy Mac. Hệ điều hành trước OSX cũ đã sử dụng <CR> làm dòng kết thúc. Unix sử dụng <LF> và Windows/DOS sử dụng <CRLF>.

Bạn có dos2unix. Chương trình này có thể chuyển đổi dòng kết thúc từ Unix/Linux, DOS/Windows hoặc Mac X thành bất kỳ định dạng nào bạn muốn. Trong tập tin của bạn, tôi mang nó bạn cần phải chuyển đổi ^Mkiểm soát Ms và không phải là một Caret-M-NL ký tự.

+0

Nhân tiện, để thực hiện điều này, bạn cần đặt 'dos2unix' vào chế độ chuyển đổi Mac:' dos2unix -c mac ' – jonahb

Các vấn đề liên quan