gnuplot stdin, comment tracer les deux lignes?
Je suis en train de produire un tracé deux lignes à l'aide de données provenant de l'entrée standard. J'ai un fichier "test.csv":
0,1.1,2
1,2,3
2,6,4
4,4.6,5
5,5,6
J'ai essayé de tracer ce avec des commandes comme,
$ cat test | gnuplot -p -e "set datafile separator \",\"; plot '-' using 1:2 with lines, '' using 1:3 with lines;"
Mais peu importe ce que j'essaie, j'en ai
line 5: warning: Skipping data file with no valid points
Je suppose que c'est parce que, pour la deuxième ligne, stdin est déjà épuisé. Est-il un moyen d'obtenir gnuplot à prendre des données de chaque colonne de stdin pour les différentes parcelles?
Grâce.
- Pourrait un
set
de commande à la place de lausing
clause? Cela pourrait peut-être permettre une utilisation dereplot
?...Hmm, probablement pas idéal; nous voulons unplot
commande ici, non?
Vous devez vous connecter pour publier un commentaire.
Le "-" est utilisé pour spécifier que les données suivent la commande plot. Donc si vous l'utilisez, vous aurez besoin de faire quelque chose comme:
(Citant ci-dessus doit probablement être échappé).
Qu'est-ce que vous cherchez est: est-ce
Maintenant, vous pouvez faire:
Remarque que vous pourriez avoir besoin pour se nourrir dans les données d'entrée via stdin plusieurs fois, si vous utilisez les options avec l'intrigue, comme suit:
Dans le cas ci-dessus, testfile doit se terminer par une ligne qui, seul, a le caractère 'e' en elle.
Manuel de référence
J'ai réussi à contourner ce problème en envoyant les données à deux reprises, dénoncé par l'am "e" sur sa propre ligne après chaque bloc.
Si votre entrée doit ressembler à
0,1.1,2 1,2,3 2,6,4 4,4.6,5 5,5,6 e
Gnuplot peut lire à partir de stdin, mais pour chaque parcelle, un nouveau jeu de données est nécessaire. Le suivant fonctionne très bien:
Le message d'erreur s'affiche dès que vous ajoutez le deuxième tracé de commande avec
, '' using 1:3
. Pour cela, vous devez envoyer les données à nouveau comme la première série de données ne sont pas stockées interally pour la réutilisation. Donc pour vous deux de la parcelle commandes, le fragment de code suivant fonctionne:Qui écrit le fichier de données deux fois, séparées par une
e
qui indique la fin des données pour la première commande plot.J'avais essayer de convertir le fichier csv à l'espace séparé (en supposant qu'aucun des dossiers s'étendent sur plusieurs lignes) par la tuyauterie à travers
sed
au lieu de définir le séparateur:plot '-' using 1:2 with lines, '-' using 1:3 with lines;
et je pense que cela devrait fonctionner.Peut-être que c'est une vieille question, mais j'ai trouvé une solution intéressante sur la base des autres réponses:
La sortie serait:
Maintenant
cat
etawk
travail comme d'habitude, l'utilitairetee
d'autre part, nous permet de copier la sortie standard les canalisations de la commande précédente dans un fichier, mais ce fichier peut être stdin lui-même afin que nous puissions faire de nombreuses copies de lui, en spécifiant n fois-
après-a
.L'option
-i
arrête d'être interrompu par des signaux au cours de la copie,-a
dit-il d'ajouter l'entrée à l'entrée standard, sans les écraser, puis d'écrire le tout à stdout.De référence de prendre un coup d'oeil à Tee Utilitaire
tee
utilitaire semble bien, mais votre ligne de commande, comme vous l'avez posté ne fonctionne pas du tout pour moi. J'ai essayé les deux avecgawk
etmawk
, mais j'obtiens seulement troise
de sortie (j'ai utilisé un fichier réel dans lecat
).tee
écrit à tous ses arguments, y compris la sortie standard (stdout), si il y a assez de lignes les données seront mélangés. Vous pouvez le voir par l'envoi de plusieurs lignes de tee, par exemple. avec seq:seq 10000 | tee -i -a -
.Pour moi cela fonctionne quand je fais:
il semble que vous avez utilisé "," pour datafile séparateur à la place de ','
stdin
, pas avec le séparateur. Dans votre exemple, vous avez spécifiétest.csv
, qui d'ailleurs fonctionne très bien mais ne permet pas de répondre à la question.gnuplot semble avoir besoin d'un accès aléatoire (c'est à dire pas stdin), donc je pense que vous êtes coincé avec
Avez-vous essayé graphique? Votre cas serait aussi facile que de:
Et vous donnerait:
J'ai eu à le faire, depuis l'ajout de '-' ne fonctionne pas pour moi: