2016-03-21 24 views
0

Her birinde aynı sayıda satır bulunan birkaç dosya var. Dosyalar "a100.txt", "a200.txt", "a300.txt" gibi "something_integer.txt" olarak adlandırılır ... ve böylece (tam sayı her 100'dür ve her zaman aynıdır). Her sıra diğer dosyaların aynı satırı ile zamana bağlanır ancak diğer satırlarla bağlantılı değildir.Gnuplot: numaradan dosya ve dosyadan

Tüm dosyaların 1 numaralı satırını tek bir grafikte, tüm dosyaların 2 numaralı satırını başka bir tek grafikte (ancak bir öncekinin üzerine yerleştirilmiş) çizim yapmak istiyorum. Bunu gnuplot ile nasıl yapabilirim?

For döngüsünü kullanmam gerektiğini biliyorum. Ben (tıpkı satır 1 ve satır 2 için) gibi bir şey düşünüyordum:

do for [i=100:5000:100] { 
    plot sprintf('something_%d.txt',i) every 1::1::1 using ¿¿¿¿¿????:5, 
     sprintf('something_%d.txt',i) every 1::2::2 using ¿¿¿¿¿????:5 
} 

ancak soru ortaya çıkar: Ben koydu

  1. "¿¿¿¿¿????" çünkü ben, sütun 5'in değeri olarak değil, x'in değeri olarak, sütun i'nin değeri olarak çizim yapmak istiyorum. Nasıl yaparsın?
  2. Döngüye devam eden her zaman bir çizim talimatım var, önceki noktalar silinecek mi? İstediğim gibi bağlanacaklar mı?

cevap

0

ilk soru basittir:

plot for [i=100:5000:100] \ 
    sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \ 
    sprintf('something_%d.txt',i) every 1::2::2 using (i):5 

mi: Eğer doğru anlamak ikinci biri için, size plot iç döngü taşımak zorunda, parantez using (i):5

kullanmak zorunda istediğin bu mu?

+0

Tam olarak değil. Bu başlangıç ​​için tamam ama ben satır 1'in tüm noktalarını bir satır ve satır 2'nin tüm noktaları başka bir satır ile bağlamak istiyorum. Bununla her nokta bir "veri dizisi" gibidir. –

0

Bunu gnuplot içinde yapmaya çalıştığımı düşünüyorum overkill (ama overkill çözümlerini seviyorum!). awk veya benzeri bir şey kullanarak bash'ta bazı ön işlemlerle daha iyi durumdasınız. Ancak, yine de awk komutunu gnuplot kodunuzdan kullanabilirsiniz. İstediğin bu mu:

loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) } 

file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done" 

plot file(1) w l, file(2) w l 

n hiçbir satır seçer file(1), böylece seçiyoruz sırasıdır. Tüm dosyalarınızda 1 ve file(2) satır no'yu seçer. 2 tüm dosyalarınızda vb.