2017-07-17 15 views
-2

forme d'esprit final.txt l'espacement format of final.txtComment exécuter des commandes gnu d'octave dans un script shell

Je suis en train de créer un graphique circulaire en octave gnu mais je veux l'exécuter à travers un fichier de script

i essayé d'utiliser

octave -persist<< EOF 
[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18] = textread('final.txt', '%s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f ' ,'delimiter', ' ' ,1); 
pie([a1(2,1),a2(2,1),a3(2,1),a4(2,1),a5(2,1),a6(2,1),a7(2,1),a8(2,1),a9(2,1),a10(2,1),a11(2,1),a12(2,1),a13(2,1),a14(2,1),a15(2,1),a16(2,1),a17(2,1),a18(2,1)],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],{"200","201","202","203","204","301","302","303","304","400","401","402","403","404","500","501","502","503"}); 
title(a0(2,1)); 
legend("200","201","202","203","204","301","302","303","304","400","401","402","403","404","500","501","502","503");  
EOF 

les travaux de commande ci-dessus quand je les utilise directement en ligne de commande d'octave

mais je ne reçoivent aucune graphique lorsque je tente d'exécuter dans un fichier script

contenu final.txt

VMinstance 200 201 202 203 204 301 302 303 304 400 401 402 403 404 500 501 502 503 
dadamfl3w6v 683 0 0 0 0 0 1 0 669 0 0 0 0 0 0 0 0 0 
92ssadz9qpq 41 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 
agcrarrcbqg 38 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 
12t2bg6ws1j 25 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 
gpusa121zdz 21 0 0 0 0 0 0 0 5520 0 0 0 0 0 0 0 0 0 
dsad8urz24d 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
fggfbjrfkix 253 0 0 0 0 0 4 0 957 0 0 0 0 0 0 0 0 0 
fqlie42dsxj 5 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 
cbkajsbcj44 5 0 0 0 0 0 1 0 3 0 0 0 0 0 0 0 0 0 
f4444fffffa 3968 0 0 0 0 0 4 0 3742 0 0 0 0 0 0 0 0 0 

ma sortie après textread sur comandline

a0 = 
{ 
[1,1] = VMinstance 
[2,1] = dadamfl3w6v 
[3,1] = 92ssadz9qpq 
[4,1] = agcrarrcbqg 
+1

Vous devez toujours créer un MCVE. Ce que vous avez inclus n'est pas minimaliste mais complet ou vérifiable car 'final.txt' est manquant. Je suppose que le graphique apparaît et se ferme immédiatement parce que le param est "--persistent" et ne fonctionne pas lors de la lecture de stdin. Peut-être que vous voulez créer une image avec 'print', qui sait? – Andy

+0

final .txt est juste un fichier texte – Passenger

+0

son --persist mais il ne fonctionne pas il suffit d'ouvrir la console d'octave – Passenger

Répondre

0

Quand je lance votre code avec la Fichier final.txt que vous avez donné, il y a beaucoup de NaN dans les valeurs que les sorties readtxt. Par exemple, a1 est entièrement NaNs. Habituellement dans Matlab/Octave, ce n'est pas une bonne idée de lire les fichiers comme vous le faites. Je pense que vous devez supprimer le texte dans la première columun de votre fichier final.txt, pour obtenir

200 201 202 203 204 301 302 303 304 400 401 402 403 404 500 501 502 503 
    683  0  0  0  0  0  1  0 669  0  0  0  0  0  0  0  0  0 

Ensuite, vous chargez simplement dans une matrice en utilisant A

A=load("final.txt") 

et utilisez l'indexation appropriée .

Edit:

Voici le ouptut que je reçois quand je lance votre code de la ligne de commande:

>> [a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18]=textread('final.txt','%s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f ' ,'delimiter', ' ' ,1); 

>>a1 = 

200 
NaN 
NaN 
NaN 

Quoi qu'il en soit, même si cela fonctionne pour vous, ce que vous faites est juste très mauvaise pratique. En utilisant ce chargement de style c, vous perdez l'abstraction, la flexibilité de niveau supérieur, la parallélisation et même la syntaxe agréable que matlab/octave ont à offrir.

De plus, si vous voulez savoir à quel type de données correspond une ligne, ajoutez simplement une colonne à cette ligne spécifiant et indexant dans un dictionnaire avec vos types de données.

+0

Non cela fonctionne bien quand je cours la commande directement sur la ligne de commande d'octave Pour cela, j'ai utilisé le texte lu parce que dans textread je peux définir quel type de données est présent dans chaque colonne et il va lire selon lui – Passenger

+0

Toujours ne fonctionne pas pour moi, j'ai ajouté un exemple de sortie à la réponse. – Ash

+0

ma sortie a0 = { [1,1] = VMinstance [2,1] = aewa9hqmfl3w6v [3,1] = afa92sz9qpqsib [4,1] = agcrfgptrrcbqg [5,1] = ai15ut2bg6ws1j [6,1] = aipusasoggyhdz [7,1] = anotud8urzw0rm – Passenger