2013-09-18 3 views
1

Мой файл csv файл с полями, разделенными запятой.Awk split file дает неполные строки

Я попытался разбить файл на несколько файлов по первому полю. Я сделал следующее:

cat myfile.csv | awk -F',' '{print $0 > "Mydata"$1".csv"}' 

Он разобьет файл, но файл поврежден, последняя строка каждого файла не является полной. Положение разлома кажется случайным. У кого-нибудь есть такая же проблема?

+0

вы можете показать свой входной файл CSV или, по крайней мере, часть в вопрос (конец)? – hek2mgl

+0

Какая версия awk/какой ОС? Кроме того, можете ли вы опубликовать входной файл? – SheetJS

+0

играл с ним, работал на меня. Пожалуйста, покажите входной файл ... – gt6989b

ответ

-1

Используйте настоящий синтаксический анализатор/генератор CSV. Он безопасен для необычных входов, в том числе с многослойными значениями. И вот один вкладыш для Ruby:

ruby -e 'require "csv";CSV.foreach(ARGV.shift){|r| File.open("Mydata#{r[0]}.csv","w").puts(CSV.generate_line(r))}' file.csv 
1

Этих типов задачи неизменно, потому что вы создали свой входной файл на Windows, и поэтому он имеет поддельный контроль-Ms в конце строк. Запуск dos2unix от входного файла, чтобы очистить его затем повторно запустить команду AWK, но переписать его как:

awk -F',' '{print > ("Mydata" $1 ".csv") }' myfile.csv 

решить несколько связанных друг с другом проблем.

0

Используйте эту команду AWK игнорировать \r символы перед \n:

awk -F ',' -v RS='\r\n' '{print > ("Mydata" $1 ".csv") }' myfile.csv 
0

Только не забудьте закрыть файлы:

awk -F ',' '{ f="Mydata"$1".csv"; print $0 > f; close(f) }' myfile.csv 
Смежные вопросы