2016-10-18 2 views
0

У меня есть файл данных, состоящий из двух блоков (разделенных одной пустой строкой) и хотел бы построить разницу между данными из блока 1 и блока 2, то есть что-то вродеGnuplot: операции с данными в разных блоках

plot 'a.dat' using 1:($2_1-$2_2) 

где $2_1 предполагается означать «данные из блока 1, col.2» и $2_2 «данные из блока 2, col.2». Возможно ли это в Gnuplot, и если да, то как?

Спасибо, Том

ответ

0

Эта задача, скорее всего, не представляется возможным непосредственно в Gnuplot, однако, можно предобработки файл данных первого, используя, например, поглазеть, а затем построить измененный файл. Например:

dataFile="a.dat" 
plotCmd(fname)=sprintf("<gawk '\ 
    BEGIN{mode=0;l=0;} \ 
    mode==0{if(NF==0){mode=1;}else{x[NR]=$1;y[NR]=$2;}} \ 
    mode==1{if(NF>0){mode=2;l=NR;}} \ 
    mode==2{print $1,y[NR-l+1],$2}' %s", fname) 

plot plotCmd(dataFile) u 1:($2-$3) w l 

Сценарий простака читает файл и сохраняет первый и второй столбец в массивы x и y, пока он не достигнет пустой строки (нулевое количества полей). Затем он пропускает все последовательные пустые строки, пока не достигнет непустой строки (NF>0). Она запоминает положение этой линии во входном файле, а затем выводит для каждой строки во втором блоке координату х вместе с соответствующим Y-координатой от первого блока, то есть, в файле данные, такие как

1 2 
2 4 
3 6 



1 4 
2 8 
3 12 

будет преобразован в

1 2 4 
2 4 8 
3 6 12 

Это предполагает, что х-координаты в обоих блоках совпадают ...

Смежные вопросы