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.
5 réponses
Plus Simple:
plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
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.
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)
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))
, 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.