我是处理大数据的新手,所以希望下面的问题有一个简单的解决方案。任何帮助将不胜感激。
我一直在用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完成吗?
谢谢
答案 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.