MATLAB: Removing certain lines in a text file by setting a restriction

text file

I am trying to remove certain lines of text in a file by setting the restriction that the 15th column of the each line can only go up to the numerical value of '21'.
For example:
13|PGC000013|0.00370|33.13420|~|15.41|0.675|0.217|0.587|~|0.87|0.102|~|-18.94|72.722|10.908|0.40|0.41|
has a value of '72.722', which is more than the '21' cutoff threshold so it would be eliminated.
My file is attached.

Best Answer

This works, and it’s relatively fast:
fidi = fopen('jgillis16 copiedlines.txt','rt');
Glxc = textscan(fidi, '%s', 'HeaderLines',1, 'Delimiter','|');
frewind(fidi)
Glxcs = textscan(fidi, '%s', 'EndOfLine','\r\n');
fclose(fidi);
dlen = 18*fix(length(Glxc{:})/18); % Set Row Length
Glxcr = reshape(Glxc{:}(1:dlen), 18, [])'; % Reshape & Transpose
Idx = cellfun(@(x) str2num(x) <= 21, Glxcr(:,15), 'Uni',0); % Find Rows With Col18 <= 21 To Retain & Write To New File
LIdx = logical(cell2mat(Idx)); % Logical Array From Cell
NewGlxc = Glxcs{:}(LIdx,:); % Rows Of New Array
You would then write the ‘NewGlxc’ array to your file. (I would save it as a .mat file if it is only for MATLAB use.)
EDIT — To write it to a text file:
fido = fopen('NewGalaxy.txt','wt');
fprintf(fido, '%s\n', NewGlxc{:});
fclose(fido);