искать файлы и создавать условия с помощью gnuplot - PullRequest
0 голосов
/ 27 сентября 2018

Подскажите пожалуйста, как сделать скрипт с использованием gnuplot:

иметь папку:

d:/data/

, в которой есть файлы вв формате

[text1][delta=text2][text3][mac=text4].csv

необходимо создать скрипт для всех файлов в папке:

for [file] of [files]
{
    if [file] content text1 == 'packets' and text4 == 'all'
    {
        set xlabel "amount" font "Calibri, 10"
    }
    else
    {
        set xlabel "size" font "Calibri, 10"
    }

    set output "d:/images/out_[file].png"
    plot [file] using ...
}

более простой код без условийЯ мог бы создать

files = system("ls -1 d:/data/*.csv")
plot for [data in files] data using 1:3 with line ls 2 notitle

, но как мне сделать более сложный код с условиями, которые я не могу понять: (

1 Ответ

0 голосов
/ 28 сентября 2018

Предполагая, что отдельные части имени файла разделены подчеркиванием, можно выполнить, например, как показано ниже.Там сценарии перебирают все файлы с помощью цикла do for и разбивают каждое имя файла с помощью функции strstrt Gnuplot (это можно сделать также с помощью вызова system и таких утилит, как gawk/cut и т. Д.).Поскольку переменные text1, text4 являются строками, то сравнение выполняется с помощью оператора eq.

set terminal pngcairo

files = system("ls -1 *.csv")

do for [file in files] {
  print sprintf("processing file: '%s'", file)

  j = strstrt(file, "_");
  if (j == 0) { continue; }
  text1 = file[1:j-1] #ranges are inclusive in Gnuplot

  i = strstrt(file, "mac=");
  j = strstrt(file, ".csv");

  if (i == 0 || j == 0) { continue; }

  #i+4 since we want to start after the 'mac=' delimiter
  text4 = file[i+4:j-1]; 

  if (text1 eq "packets" && text4 eq "all") {
    set xlabel "..."
  }

  set output sprintf("out_%s.png", file);
  plot file using ...
}
...