Gnuplot tracer des données à partir d'un fichier jusqu'à une ligne

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 est cependant juste tracer disons les lignes de 1000 à 2000 ou toute autre sélection raisonnable. Est-il possible de le faire facilement? Merci beaucoup à l'avance.

30
demandé sur YBE 2012-03-02 20:12:43

5 réponses

Plus Simple:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
27
répondu kev 2017-09-26 15:14:15

Il semble que la commande "every" dans gnuplot est ce que vous recherchez:

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

Sinon, 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 résultat " traité.txt " dans votre commande/script gnuplot existant.

68
répondu Stuart Lange 2012-03-02 16:58:20

Vous pouvez probablement couper la dépendance à un utilitaire externe (si votre système ne les a pas installés par exemple) en utilisant 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)

7
répondu mgilson 2012-03-14 17:15:55

Gnuplot ignore les valeurs NaN. Cela fonctionne pour moi, pour une plage spécifiée de l'abscisse. Je ne sais pas comment spécifier la plage de lignes.

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))
1
répondu Karol Trojanowski 2013-05-14 10:49:02

, je recommanderais de certains outils en ligne de commande comme 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 n'ont pas testé si de tels nombres fonctionnent avec la tête et la queue.

0
répondu BREMI 2016-12-16 00:26:12