Gnuplot выводит данные из файла до некоторой строки - PullRequest
33 голосов
/ 02 марта 2012

У меня есть данные в каком-то текстовом файле, скажем, 10000 строк и 2 столбца.Я знаю, что могу легко построить это по plot "filename.txt" using 1:2 with lines.Однако я хочу лишь построить графики, скажем, от 1000 до 2000 или любой другой разумный выбор.Можно ли сделать это легко?Заранее большое спасибо.

Ответы [ 5 ]

76 голосов
/ 02 марта 2012

Похоже, что "каждая" команда в gnuplot - это то, что вы ищете:

plot "filename.txt" every ::1000::2000 using 1:2 with lines

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

awk "NR>=1000 && NR<=2000" filename.txt > processed.txt

Затем используйте получившийся файл "processing.txt" в существующей команде / скрипте gnuplot.

29 голосов
/ 02 марта 2012

Проще:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
9 голосов
/ 14 марта 2012

Вы, вероятно, можете отключить использование внешней утилиты (например, если в вашей системе они не установлены), используя псевдостолбец 0.

см. help plot datafile using pseudocolumn

Попробуйте что-то вроде:

LINEMIN=1000
LINEMAX=2000

#create a function that accepts linenumber as first arg
#an returns second arg if linenumber in the given range.
InRange(x,y)=((x>=LINEMIN) ? ((x<=LINEMAX) ? y:1/0) : 1/0)

plot "filename.txt" using (InRange($0,$1)):2 with lines

(протестировано на Gnuplot 4.4.2, Linux)

1 голос
/ 14 мая 2013

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

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))
0 голосов
/ 02 марта 2012

Я бы порекомендовал некоторые инструменты командной строки, такие как sed, grep или bash. В вашем примере

head -n 2000 ./file.data > temp.data

и

tail -n 1000 temp.data > temp2.data

может сработать. Но не проверял, работают ли такие большие числа с головой и хвостом.

...