从大文本文件

时间:2015-12-04 19:07:21

标签: matlab text

我是处理大数据的新手,所以希望下面的问题有一个简单的解决方案。任何帮助将不胜感激。

我一直在用EmEditor修改一个~2GB的文本文件,即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完成吗?

谢谢

1 个答案:

答案 0 :(得分:2)

Here's a way using textscan to read the data and fprintf to write it:

% 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);

The only potential issue with the above is that you might have memory issue if your files are sufficiently large.