2017-07-17 34 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