2014-10-27 73 views
2

在目錄l250中,我有幾個文件。它們每個以「l2_」開始,然後是數值。我希望能夠繪製約300個文件的last.sh文件。我想知道什麼是我可以遍歷文件的方式,並且具有$ 1並且具有第二個值爲$ 2。Gnuplot;迭代目錄中的文件以打印png

我在想,因爲這些文件在我可以使用的當前目錄中。但後來我讀到awk和csv,我不知道該怎麼做。我想知道什麼是更好的方式來迭代大量文件評估者,然後將其放在main.sh中並運行它。

main.sh

sh last.sh l2_4 1 
sh last.sh l2_5 2 
sh last.sh l2_6 3 
sh last.sh l2_7 4 
. 
. 
. 

last.sh

gnuplot << EOF 
set terminal png 
set output "finished/$1.png" 
set xlabel "Angs" 
set ylabel "Angs" 
set title "$1 | $2 fs " 
set zrange [0: 0.00001] 
set pm3d map 
splot "$1" 
EOF 

我運行在命令行中執行以下操作:

$sh main.sh 

回答

5

首先你生成一個包含了所有的文件名列表

list = system('ls l2_*') 

,然後可以用do for ...遍歷(gnuplot的4.6需要):

set terminal pngcairo 
set xlabel "Angs" 
set ylabel "Angs" 
set zrange [0: 0.00001] 
set pm3d map 

list = system('ls l2_*') 
i = 1 

do for [file in list] { 
    set output sprintf('finished/%s.png', file) 
    set title sprintf("%s | %d fs", file, i) 
    splot file 
    i = i + 1 
} 
+0

有些一兩件事,該圖案是7 - 3 = 4個FS。傳播開始於l2_3,因此在該圖中波是0fs。它會繼續。有沒有辦法知道*的值,並從中減去一個整數,並讓它是我?所以如果*是10,我們知道我會是10 -3 = 7 fs。 – Tasha 2014-10-27 16:34:07

+2

爲了提取所有'*'的最小值,使用'min = int(system('sed's/l2 _ // g「| sort -n | head -1'))''。也許你還必須傳遞一些選項到'ls'或者通過'sort -n'管道輸出來獲得正確的文件排序。 – Christoph 2014-10-27 16:50:47