2015-01-13 79 views
0

我想根據匹配的時間戳合併cygwin或matlab中的一些文本文件;根據另一個文件中的匹配值篩選文本文件

我有一個文件帶有時間標記的一個列:

文件1:

7, 
486, 
730, 
1031, 
1331, 
1631, 
1931, 
2231, 
... 
100000 

和文件2; 3列和不同的時間標記(赫茲):

1 data1 data2, 
2 data1 data2, 
3 data1 data2, 
4 data1 data2, 
.... 
100000 data1 data2 

我想合併基於匹配時間戳的文件,我保存文件1,列1:

7 data1 data2, 
486 data1 data2, 
730 data1 data2, 
1031 data1 data2, 
1331 data1 data2, 
... 

感謝

+0

是你的'data1'和'data2'列數值還是他們是文本字符串? – Hoki

+0

所有數字,沒有文字。抱歉。 –

回答

1

您在Matlab中必須使用的主要功能是:ismember

它將返回文件2(數據文件)中與文件1(僅限時間戳)的時間戳相匹配的時間戳的索引(行號)。顯然,先讀你的數據,你合併,然後寫輸出文件。

timestamp1 = dlmread('textfile1.txt') ;   %// read timestamp only file 
DATA  = dlmread('textfile2.txt') ;   %// read DATA file 
timestamp2 = DATA(:,1) ;      %// Extract timestamp from DATA (optional) 

commonIndex = ismember(timestamp2,timestamp1) ; %// Find common timestamps line index in file 2 
MergedData = DATA(commonIndex,:) ;    %// build common matrix 

dlmwrite('MergedData.txt',MergedData,'Delimiter',' ') %// write output file 
+0

謝謝!乾杯。 –

+0

你應該知道這不是一個合併文件,但實際上是textfile2.txt的一個過濾版本,只有剩餘的行以textfile1.txt中的一個時間戳開始。這可能是你想要的,但在兩年之內,有人可能會想知道他textfile1.txt中的data3列已經消失了,或者file1中的其他時間戳;-)如果你真的想要一個過濾器,這是一個乾淨的方式來做到這一點只有數值數據。 – hugovdberg

+1

@ hugovdberg。我同意這種語義,「合併」不是描述這一操作的正確詞(問題的標題可以改變,以更好地尊重)。然而,我認爲在問題的文本中對執行的實際操作的描述是足夠清楚的(因此OP似乎知道他想要什麼,並且他意識到一些線路將在該過程中被丟棄,因爲這是他要求的),顯然答案令他滿意。 _ps:在第一個文本文件中沒有column_'data3',也沒有在第二個文件中。# – Hoki

相關問題