2017-07-17 35 views
-2

格式 format of final.txt如何执行shell脚本里面GNU八度命令final.txt心态

我试图创建在GNU八度饼图,但我希望它通过一个脚本文件,运行间隔

我尝试使用

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 

上述命令工作时,我直接在八度命令行使用它们

,但我没有得到任何图表当我尝试通过一个脚本文件来运行

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 

textread后,我的输出上comandline

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

你应该总是创建MCVE。你所包含的内容不是简约但完整或可验证的,因为缺少了'final.txt'。我猜想这个图会立即弹出并关闭,因为参数是“--persistent”,并且在从stdin读取时不起作用。也许你想用'print'创建一个图像,谁知道? – Andy

+0

最终.TXT只是一个文本文件 – Passenger

+0

其--persist,但它不工作只是开了八度控制台 – Passenger

回答

0

当我与运行代码您提供的final.txt文件中,readtxt输出的值中有很多NaN。例如,a1完全是NaN。通常在Matlab/Octave中,像你一样阅读文件不是一个好主意。我想你应该删除您final.txt文件的第一columun文本,以获得

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 

然后你只需要使用

A=load("final.txt") 

加载它在矩阵A并使用相应的指数化。

编辑:

这里是ouptut当我在命令行中运行代码我得到:

>> [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 

无论如何,即使你的作品,你在做什么只是非常糟糕的做法。通过使用这种c风格的加载,你会失去抽象,更高层次的灵活性,并行化,甚至是matlab/octave必须提供的良好语法。

此外,如果你想知道一些数据行对应的是什么类型,只需添加到该行指定和索引一些dictionnary与您的数据类型。

+0

没有当我直接倍频命令行 运行命令。为此我已经使用文本阅读它工作正常因为在textread我可以定义什么类型的数据是存在于每个列,它会根据它 – Passenger

+0

读还是不适合我的工作,我添加了一个输出示例答案。 – Ash

+0

我的输出 A0 = { [1,1] = VMinstance [2,1] = aewa9hqmfl3w6v [3,1] = afa92sz9qpqsib [4,1] = agcrfgptrrcbqg [5,1] = ai15ut2bg6ws1j [6,1] = aipusasoggyhdz [7,1] = anotud8urzw0rm – Passenger