Сохранить вывод команды 'stats' в gnuplot - PullRequest
0 голосов
/ 06 мая 2019

Я хочу статистически проанализировать выходные файлы из эталонного теста, который работает на 600 узлах.В частности, мне нужны минимальные, верхние квартили, медианы, нижние квартили, минимальные и средние значения.Мой вывод - это файлы testrun16-[1-600]

с кодом:

ListofFiles = system('dir testrun16-*')

set print 'MaxValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_max
}

set print 'upquValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_up_quartile
}

set print 'MedianValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_median
}

set print 'loquValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_lo_quartile
}

set print 'MinValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_min
}

set print 'MeanValues.dat'
do for [file in ListofFiles]{
stats file using 1 nooutput
print STATS_mean
}

unset print
set term x11
set title 'CLAIX2016 distribution of OSnoise using FWQ'
set xlabel "Number of Nodes"
set ylabel "Runtime [ns]"
plot 'MaxValues.dat' using 1 title 'maximum value', 'upquValues.dat' title 'upper quartile', 'MedianValues.dat' using 1 title 'median value', 'loquValues.dat' title 'lower quartile', 'MinValues.dat' title 'minimum value', 'MeanValues.dat' using 1 title 'mean value';
set term png
set output 'noises.png'
replot

Я получаю эти значения и могу построить их.Тем не менее, кортежи из каждого запуска смешиваются.Среднее значение testrun16-17.dat нанесено на x=317, мин также находится в другом месте.

Как сохранить выходные данные, но сохранить кортежи вместе и нанести каждый узел на свое место?

1 Ответ

1 голос
/ 07 мая 2019

В Windows (и Linux?) Может быть какой-то особый способ сортировки (или несортировки) данных в списке каталогов. Чтобы устранить эту неопределенность, вы можете зациклить ваши файлы по номеру. Однако это предполагает, что все числа от 1 до максимума (= FilesCount, в вашем случае 600) действительно существуют. Вы пометили Linux, извините, но я знаю только Windows, и команда для получения списка только имен файлов в Windows - 'dir /B testrun16-*'.

Есть ли особая причина, по которой вы пишете статистические числа в 7 разных файлах? Почему не в один файл?

Примерно так: ( изменено после комментария OP )

### batch statistics
reset session

FileRootName = 'testrun16'
FileList = system('dir /B '.FileRootName.'-*')
FilesCount =  words(FileList)
print "Files found: ", FilesCount

# function for extracting the number from the filename 
GetFileNumber(s) = int(s[strstrt(s,"-")+1:strstrt(s,".dat")-1])

set print FileRootName.'_Statistics.dat'
    print "File Max UpQ Med LoQ Min Mean"
    do for [FILE in FileList] {
        stats FILE u 1 nooutput
        print sprintf("%d %g %g %g %g %g %g", \
        GetFileNumber(FILE), \
        STATS_max, STATS_up_quartile, STATS_median, \
        STATS_lo_quartile, STATS_min, STATS_mean)
    }
set print

plot FileRootName.'_Statistics.dat' \
       u 1:2 title 'maximum value', \
    '' u 1:3 title 'upper quartile', \
    '' u 1:4 title 'median value', \
    '' u 1:5 title 'lower quartile', \
    '' u 1:6 title 'minimum value', \
    '' u 1:7 title 'mean value'
### end of code
...