Gnuplot выводит данные из файла до некоторой строки

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

Ответ 1

Simpler:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines

Ответ 2

Похоже, что каждая команда в 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.

Ответ 3

Вероятно, вы можете отключить зависимость от внешней утилиты (если ваша система их не установлена, например), используя псевдо-столбец 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)

Ответ 4

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

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))

Ответ 5

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

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

и

tail -n 1000 temp.data > temp2.data

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