How can I extract the last rows of specific columns of a text file

5 views (last 30 days)
Please, I have a text file contains three columns I need to extract the last rows of the third and forth columns only and write them into a text file. for example, from the text file attached the result needs to be written in a text file. it should return:
1.87 36
157 35
1.88 37
1.36 48
1.73 78
1.99 100
Many thanks

Accepted Answer

Thorsten
Thorsten on 21 Oct 2015
Edited: Thorsten on 21 Oct 2015
Read the data from file, ignoring 1 header line:
data = cell2mat(textscan(fopen('a.txt'), '%f%f%f', 'headerlines', 1));
Find the last position for each sequence in column 2. The last position is the position where the data changes, i.e., where the difference is > 0. Add 1 to the end get the last position for the last sequence:
idx = find([diff(data(:,2)); 1] > 0);
Now we have the position of the last entry of each sequence in ind. Since we want the last n elements of a sequence, we use the entry x minus n+1, so x -2 in case of n = 3. For the i'th sequence, we want to extract data(ind(i)-2:ind(i), 3). Instead of using a for-loop, we use arrayfun to work on the ind array:
d3 = arrayfun(@(x) (data(x-2:x,3)), idx, 'UniformOutput', false);
The final step is to write the numbers to a file:
dlmwrite('b.txt', d3)
  2 Comments
ND
ND on 21 Oct 2015
Edited: ND on 21 Oct 2015
Many thanks Thorsten Sorry, what about if I do not have headers ,( just data)?

Sign in to comment.

More Answers (1)

TastyPastry
TastyPastry on 19 Oct 2015
Open the file
fid = fopen('your file name.txt');
Skip the header
fgetl(fid);
Use textscan()
myOutput = textscan(fid,'%d %d %d');
It will return a cell array containing all the numerical data, just ignore the first two columns.
  1 Comment
ND
ND on 20 Oct 2015
Edited: ND on 21 Oct 2015
Sorry that is not what I need. For example, a text file has the following:
Bar No increment No Variable
1 1 0
2 1 3
1 2 4
2 2 5
1 2 6
2 2 9
I need to extract just the last variable values(column 3) of each increment
Returns one column written in a text file as :
0
3
6
9

Sign in to comment.

Categories

Find more on Large Files and Big Data in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!