2015-12-04 3 views
1

Я новичок в работе с большими данными, поэтому, надеюсь, есть простое решение проблемы ниже. Любая помощь будет принята с благодарностью.Извлечение столбцов из большого текстового файла

Я редактировал текстовый файл размером 2 ГБ с помощью EmEditor, который составляет 315 000x1706. Заголовок каждого столбца содержит 1 или 2 случайным образом. Вот небольшая картина того, что у меня есть:

1 2 2 1 1 1 2 1   1 1 1 1 1 2 2 2 

AA TT TA CT TT GA TA CT   AA CT TT GA CT TT TA TA 
AA TT TA CT TT GA TA CT   AA CT TT GA CT TT TA TA 
AA TT TA CT TT GA TA CT   AA CT TT GA CT TT TA TA 
     (File)      (File 1)  (File 2) 

Мне нужно разбить это на два файла, один только «1» столбцов и другой только с «2» колонки.

Любые предложения о том, как это сделать? Файл слишком большой, чтобы открыть его в excel. Эти данные в конечном итоге окажутся в Matlab. Можно ли это сделать с помощью Matlab?

Спасибо

+0

Вы можете добиться того, что хотите для небольших текстовых файлов? С текстовым файлом вы должны читать его по очереди и обрабатывать. – Daniel

+0

Даже с меньшими файлами я не знаю, с чего начать. – dps2501

+0

Я предполагаю, что есть несколько строк вдоль строк 'AA TT TA CT TT GA TA CT'? Было бы полезно, если бы вы отредактировали вопрос, чтобы предоставить более полный мини-пример того, что находится в файле. – horchler

ответ

2

Вот способ использования textscan для считывания данных и fprintf написать его:

% Read data 
f0 = 'data0.txt'; 
fid = fopen(f0,'r'); 
head = textscan(fid,'%u'); 
data = textscan(fid,'%2s'); 
fclose(fid); 

% Process data 
idx = (head{1}==1); 
data = reshape(data{1},numel(idx),[]); 

% Write file corresponding to 1s in header 
f1 = 'data1.txt'; 
fid = fopen(f1,'w+'); 
fprintf(fid,[repmat('%s ',1,nnz(idx)-1) '%s\n'],data{idx,:}); 
fclose(fid); 

% Write file corresponding to 2s in header 
f2 = 'data2.txt'; 
fid = fopen(f2,'w+'); 
fprintf(fid,[repmat('%s ',1,nnz(~idx)-1) '%s\n'],data{~idx,:}); 
fclose(fid); 

только потенциальная проблема с выше, что вы можете иметь проблемы памяти, если ваши файлы достаточно большой.

+0

Спасибо! Я сделаю этот снимок в эти выходные. Машина, с которой я работаю, имеет 32GM RAM. В противном случае я разберу файлы. Еще раз спасибо! – dps2501

Смежные вопросы