2015-08-18 4 views
1

В настоящее время я обрабатываю большие файлы со значениями, которые выглядят, например. как это (всегда 2 колонки, но более 100 000 строк):расчет производной для каждой строки файла с более чем 100 000 строк

1,3 1,5

2,5 2,0

3,6 6,0

4,0 10,1

7,8 11,5

Для них Я хочу вычислить производную типа: (2.0-1.5)/(2.5-1.3) &, затем (6.0-2.0)/(3.6-2.5) и т. д. Я написал файл Scilab, который читает в матрице x из файла (test.txt), а затем выполняет цикл for, где вычисляются производные. Вот моя версия:

[x] = read('test.txt',-1,2); 

i = 1; 

j = 1; 

s = size(x); 

for i = 1:s(1,1)-1 

f(i) = (x(i+1,2)-x(i,2))/(x(i+1,1)-x(i,1)) 

delta(i)=((x(i+1,1)+x(i,1)))/2 

i=i+1 

end 

Мои вопросы носят двоякий характер:

1) расчет более 100 000 строк занимает очень много -> есть ли возможность сделать это быстрее? Или это возможно только при уменьшении количества строк (например, только с учетом каждого 1000-го шага?)

2) Поскольку я хочу сделать это в сценарии linux: есть ли простой способ сделать это в awk или с другим средством linux (например, sed ...)?

Большое вам спасибо за помощь!

Стефан

ответ

0

С Scilab вы можете продолжать как следовать

x = read('test.txt',-1,2); 
f=diff(x(:,2))./diff(x(:,1)) 
delta=(x(2:$,1)+x(1:$-1,1))/2 
+0

отлично работает, спасибо! –

3

дает этой линии попробовать:

awk '{if(NR>1)printf "%.1f\n",($2-b)/($1-a);a=$1;b=$2}' file 

выхода с вашим примером данными:

0.4 
3.6 
10.3 
0.4 

Если результат не то, что вы хотите, пожалуйста, обеспечить ожидаемый пример вывода ,

+0

работает очень тонкой и очень быстро! большое спасибо! –