J'ai des données dans un fichier texte qui a, disons, 10000 lignes et 2 colonnes. Je sais que je peux le tracer facilement par plot "filename.txt" using 1:2 with lines
. Ce que je veux, c’est simplement tracer un graphique, disons les lignes de 1000 à 2000 ou toute autre sélection raisonnable. Est-il possible de le faire facilement? Merci beaucoup d'avance.
Plus simple:
plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
Il semble que vous recherchiez le "every" command in gnuplot:
plot "filename.txt" every ::1000::2000 using 1:2 with lines
Vous pouvez également pré-traiter votre fichier pour sélectionner les lignes qui vous intéressent. Par exemple, en utilisant awk:
awk "NR>=1000 && NR<=2000" filename.txt > processed.txt
Ensuite, utilisez le fichier "processing.txt" résultant dans votre commande/script gnuplot existant.
Vous pouvez probablement supprimer le recours à un utilitaire externe (par exemple, si votre système ne les a pas installés) à l'aide de la pseudo-colonne 0.
voir help plot datafile using pseudocolumn
Essayez quelque chose comme:
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
(testé sur Gnuplot 4.4.2, Linux)
Gnuplot ignore les valeurs de NaN. Cela fonctionne pour moi pour une plage spécifiée de la coordonnée x. Vous ne savez pas comment spécifier une plage de lignes.
cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))
Je recommanderais des outils en ligne de commande tels que sed
, grep
ou bash
. Dans votre exemple
head -n 2000 ./file.data > temp.data
et
tail -n 1000 temp.data > temp2.data
pourrait fonctionner. Mais je n'ai pas vérifié si un si grand nombre de personnes travaillait avec la tête et la queue.