голова и кошка не распознают текстовые файлы Microsoft Excel

860
Marcus Nunes

У меня есть большой файл .xls с 53760 строками и 19 столбцами. Я сохранил его как текст с разделителями табуляции, чтобы предварительно обработать его с помощью инструментов командной строки и позже загрузить в R. Тем не менее, когда я бегу

head myfile.txt 

мой терминал показывает все строки одновременно, как

cat myfile.txt 

Команда должна делать. Но если я бегу

cat myfile.txt | wc -l 

я получаю ответ 0. Более интересно, что R может читать мои данные без помощи какого-либо дополнительного пакета и идентифицировать все 53760 строк и 19 столбцов. Я полагаю, это проблема Excel, но я не могу понять, что это такое.

Я использую Mac OS 10.9.1, Microsoft Excel для Mac 2011, bash 4.2 и iTerm 2 1.0.0.20130622

1
Затем IIRC и заголовок, и wc считают линии и нуждаются в их ожидаемом маркере конца строки. Этот маркер, к сожалению, отличается для разных систем (например, Unix, Windows и более старые Apple OS (та, что была до OS X) использовали \ 10, \ 10 \ 13 и \ 13 в качестве кодов (комбинации новой строки и возврата). Можете ли вы проверить, какой формат в вашем файле? Hennes 10 лет назад 2
Ваше предложение имело смысл. Я изменил с Excel на LibreOffice, экспортировал мой файл как .csv, и теперь он работает. Спасибо! Marcus Nunes 10 лет назад 0

1 ответ на вопрос

0
Billy McCloskey

On Linux and Mac OS, go into vi, perform the following substitution, and save out the file again, and that should work for you,

$ vi myfile.txt :%s/^V^M/^V^M/g :wq 

where ^V^M means type Ctrl+V, then Ctrl+M, and terminate each line with a return.

This should put normal UNIX line terminator characters at the end of the Excel comma separated value lines. You could even create a vi script to automate it if you do it a lot, then call that vi script from a bash script, and hide all this system incongruity away, and call it dos2unix. :-)

To create the vim script in dos2unix.vim, do the following:

  1. Create the script by

    $ vi -w dos2unix.vim myfile.txt

  2. Carefully type in the 3 line sequence as mentioned above.

  3. Now apply that scrip to any file with

    $ vi -s dos2unix.vim anyfile.txt

And wrapping that all up in a bash script or even an alias, as in, is up to you

alias dos2unix='vi -s ~/.vimscripts/dos2unix.vim ' 

To be able to do it like it was builtin, because it now will be - just create a folder called, ~/.vimscripts, and put the above created script file there.