[Çözüldü]Klasör oluşturucu bir betik

Başlatan zeusmaster, 21 Aralık 2011 - 23:45:00

« önceki - sonraki »

0 Üyeler ve 5 Ziyaretçi konuyu incelemekte.

zeusmaster


#/bin/sh
echo    "Hadi verileri oluşturalım :)"
echo -n "Ana klasör adı ne olsun? : "
read ana
echo
echo -n "Ana klasörü nereye oluşturmamı istersin? : "
read dizin
echo
echo -n "Nerden başlasın? : "
read baslangic
echo
echo -n "Nerde bitsin? : "
read bitis
echo
echo -n "Artiş miktarı nasıl olsun ? :"
read artis
echo
echo -n "CSV dosyası nerede ve adı ne"
read csv
echo
echo -n"info dosyası nerede"
read inf
cd $dizin
mkdir $ana
cd $ana
deger=$baslangic
while [ $deger -lt $bitis ]
   do
        deger=$((deger+$artis))
      read $deger
        mkdir $deger
cp /$csv /$deger
   done


Sorularım;
1)Neden kaç klasör oluşacaksa o kadar ENTER'a basmam gerekiyor?Otomatik olarak değer BİTİŞ e eşit olana kadar sayıları oluşturup ardından klasörleri oluşturması gerekmiyor mu?
2)Artış miktarını ondalıklı verince neden klasörler oluşmuyor?(ondalık için , de denedim . da)
Up and Running...

alquirel

Bu işlerden pek anlamam ama Enter tuşunun sebebi şu olabilir mi?

Alıntı Yap
while [ $deger -lt $bitis ]
   do
        deger=$((deger+$artis))
        echo -n deger
        read $deger
        mkdir $deger
   done

zeusmaster

#2
Alıntı yapılan: alquirel - 21 Aralık 2011 - 23:54:46
Bu işlerden pek anlamam ama Enter tuşunun sebebi şu olabilir mi?

Alıntı Yap
while [ $deger -lt $bitis ]
   do
        deger=$((deger+$artis))
        echo -n deger
        read $deger
        mkdir $deger
   done
ben de orası olduğunu düşünmüştüm :) ve çeşitli yollar deniyorum ama olmuyor.Orasını otomatik olarak geçmesi için ne yapmam lazım?
Up and Running...

eribol

Pek anlamıyormuş gibi görünmüyorsun :)

Benim bir sorum olacak. Bu $deger değişkeni bash ile kullanıldığında her defasında başında "$" işareti olması gerekmiyor mu? Zira bazı yerlerde kullanılmamış.

Ayrıca programda döngüyü $deger değişkeni ile kontrol etmek gereksiz gibi göründü bana ya da ben programın tam olarak ne iş yaptığını anlayamadım.

zeusmaster

#4
@eribol hocam bu betik bana verdiğim aralık değer ile artan sıralı klasörler yapacak ve içlerine istediğim klasörleri kopyalayacak
Up and Running...

alquirel

Döngü içinde tekrardan "deger" değişkenini okuma ihtiyacı neden var?
Otomatik olarak geçmek derken o satır bana gereksiz gibi görünmüştü o yüzden öyle söyledim.

Bu arada anlamıyorum derken Bash'den bahsetmiştim :D

eribol

Kodlara csv eklemesi mi yapıldı?

zeusmaster

#7
evet oluşan klasörlere de csv dosyasını alıp kopyalasın istedim :)
Up and Running...

alquirel

Alıntı yapılan: alquirel - 22 Aralık 2011 - 00:05:42
Döngü içinde tekrardan "deger" değişkenini okuma ihtiyacı neden var?

Cevap alamadım...

eribol

#9
Bunun zor bir tarafı varsa o da bu son eklediğinizdir. Klasör oluşturmak pek de zor değil.

zeusmaster

#10
Alıntı yapılan: eribol - 22 Aralık 2011 - 00:29:55
Bunun zor bir tarafı varsa o da bu son eklediğinizdir. Klasör oluşturmak pekte zor değil.

bunlar başlangıç hocam :)Bu csv uzantılı dosyada değişiklik olmadan kopyalanacak ama inp dosyası da kopyalanacak.Kopyaladıktan sonra

Dimensions = 2

FlushMessages = yes

CalculationMode = gs

Units = atomic

FromScratch = yes

ExtraStates = 0

N = 48

%Species
"qd" | 1.0 | species_from_file | N | "eksi3_2_1500nm_uzunsekil_48x96_ha.csv"
%

%Coordinates
"qd" | 0 | 0 | no
%

%Occupations
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
%

SpinComponents = polarized

# P_c is the speed of light in atomic units.

P_c = 137.036

%StaticMagneticField
0 | 0 | 0.1457106*P_c*4.720
%

BoxShape = parallelepiped

%LSize
56 | 112 | 0
%

Spacing = 1.1

DerivativesOrder = 4

GyroMagneticRatio = 0

LCAOStart = lcao_none

TheoryLevel = dft

EigenSolver = cg
MaximumIter = 5000
ConvAbsEv   = 1e-5
TypeOfMixing = broyden

ParallelizationStrategy = par_domains

Output = potential + density + matrix_elements
OutputMatrixElements = ang_momentum
OutputHow = plane_z + matlab


dosyasının içinden

0 | 0 | 0.1457106*P_c*4.720
deki
P_c*4.720
yi
P_c*OLUŞAN_DOSYA_ADI
ile değiştirecek:)
Bakalım bu bilgiyle nasıl yapacağım bunu :)Nümerik hesaplar yapıyoruz ve bu betik cidden işimizi çok kolaylaştıracak :)
Up and Running...

eribol

Bence öncelikle başlangıçta sorduğunuz soruyu bulmaya çalışın aksi halde yolunuzu kaybedersiniz. Zira benim gördüğüm kodlarda değişkenler ve döngülerde yanlış yol izlenmiş. Basit kısımda bile işi koda dökerken zorlanıyorsanız algoritmanın şart olduğu kısımda işin içinden zor çıkarsınız gibime geliyor :) Şevkiniz de kırılır. Acelesi yok ise adım adım ilerlemekte fayda var.

zeusmaster

#12
o zaman @eribol hocam
1)Neden klasörler oluşurken her seferinde ENTER a basıyorum?
2)Ondalıklı işlem neden yapamıyorum? | bc yada | awk eklememe rağmen :(
Up and Running...

eribol

Bir öneriyle başlasam daha iyi olacak :) Öncelikle önerileri ve belgeleri iyi okumak gerek. Bakınız ;
Alıntı yapılan: alquirel - 22 Aralık 2011 - 00:29:34
Alıntı yapılan: alquirel - 22 Aralık 2011 - 00:05:42
Döngü içinde tekrardan "deger" değişkenini okuma ihtiyacı neden var?

Cevap alamadım...
cevapsız kalmış. Oysa dediği gibi o kırmızı ile işaretlediği kısım tamamen gereksiz gibi görünüyor ve evet o kısım her defasında giriş yapmanızı istiyor.

2- Ben ortada bir artış oranı göremiyorum. Var ama programda sanki düzgün kullanılmamış gibi. Yani sorun kodlamada yoksa mkdir güzel güzel oluşturabiliyor.


zeusmaster

#14
#/bin/bash
echo    "Hadi verileri oluşturalım :)"
echo -n "Ana klasör adı ne olsun? : "
read ana
echo
echo -n "Ana klasörü nereye oluşturmamı istersin? : "
read dizin
echo
echo -n "Nerden başlasın? : "
read baslangic
echo
echo -n "Nerde bitsin? : "
read bitis
echo
echo -n "Artiş miktarı nasıl olsun ? :"
read artis
echo
cd $dizin
mkdir $ana
cd $ana
deger=$baslangic
while [ $deger -lt $bitis ]
   do
        deger=$(($deger+$artis))
      echo $deger
mkdir $deger
   done


şu an klasörler tam sayı artış verdiğimde otomatik oluşuyor hocam :)Ama ondalıklı değerlerde oluşmuyor.Kabukta sanırım tam değerlerle işlem yapılırmış.Ondalıklı işlemlerde |bc yada |awk eklenmeli yazıyor.Hepsini denedim ama bir türlü 4.5 adlı klasör oluşturamadım :(
Up and Running...

eribol

Bir soru daha sorup yatayım ben :)

Bu oluşturulan dizinler birbirinin içine mi oluşturuluyor yoksa tek bir dizin içerisine sıralanmış şekilde mi oluşturuluyor?

A dizininin içeriği
b1, b2, b3, ... şeklinde mi?

zeusmaster

önce bir klasör oluşturuyorum.Bu while döngüsü ile oluşan klasörler ilk oluşturduğum klasörün içine oluşuyorlar hocam
Up and Running...

ironic

#17
Dizin oluşturma içine csv dosyası kopyalama işlemi tamam. info dosyası ile ilgili şimdilik bir işlem yapmıyor. Pencereden seçilmese de olur.

Düzenleme: inp dosya işlemi de eklendi.





Bağımlılıklar : bc, sed, awk, yad


#!/bin/bash

SEC=`yad --form --title 'Seçenekler' \
--field='Ana dizin adı:' \
--field='Ana dizin konumu:DIR' \
--field='Başlangıç değeri:' \
--field='Bitiş değeri:' \
--field='Artış miktarı:' \
--field='CSV dosyası:FL' \
--field='Info dosyası:FL' \
--button='gtk-execute:0' --button='gtk-quit:1' \
--fixed --sticky --mouse`

case $? in
  0)
    IFS="|"
    sec_listesi=()

    for i in ${SEC}
    do
      sec_listesi+=("$i")
    done
    unset IFS

    [[ ! -r "${sec_listesi[5]}" ]] && { printf "CSV dosyası okunabilir değil\n"; exit 1; }
    [[ ! -r "${sec_listesi[6]}" ]] && { printf "Info dosyası okunabilir değil\n"; exit 1; }

    ana_dizin="${sec_listesi[1]}/${sec_listesi[0]}"
    mkdir -p "${ana_dizin}" || { printf "Ana dizin oluştururken hata\n"; exit 1; }
    cd "${ana_dizin}"
    deger="${sec_listesi[2]}"

    while true
    do
      if [ $(echo "$deger > ${sec_listesi[3]}" | bc) -eq 1 ]; then break; fi
      mkdir "${deger}"; cp "${sec_listesi[5]}" "${sec_listesi[6]}" "${ana_dizin}/${deger}"
      sed -i "/%StaticMagneticField/,/%/ s/\(P_c\).*/\1\*$deger/" \
      "${deger}/$(basename "${sec_listesi[6]}")"
      deger="$(echo "$deger ${sec_listesi[4]}" | awk '{print($1+$2)}')"
    done
    cd - &>/dev/null
    ;;
esac


zeusmaster

#18
@ironic, hocam ne kadar teşekkür etsem az kalır  :-[ Çok sağol klavyen dert görmesin :D
Ama şöyle bir hata almaktayım.
bahdem@bahdem:~/Masaüstü$ sh klasöryapıcı.sh
klasöryapıcı.sh: 17: Syntax error: "(" unexpected (expecting ";;")


Söylediğiniz tüm bağımlılıkları yükledim ama awk sanl bir pakettir uyarısı aldım ve gawk yükledim.ondan olabilir mi acaba?Tekrar tekrar teşekkür ederim
Up and Running...

ironic

@bahdem, rica ederim.

Ben gawk taraftarıyım. Ubuntu da son bir iki sürüm önce gawk kaldırılmıştı. Awk kurulu diye komutu awk ile yazmıştım. gawk için:

deger="$(echo "$deger ${sec_listesi[4]}" | awk '{print($1+$2)}')"

satırındaki awk yerine gawk yazılması yeterli. Normalde awk ile de uyumlu olması lazım .

Diğer sorun, betiğin sh ile çalıştırılmasından kaynaklanıyor. Ubuntu da sh sembolik bağ ile dash a bağlı. Görünüşe bakılırsa da bash uyumluluğu bu noktada yok.

Kısaca

bash klasöryapıcı.sh

ya da betiğe çalıştırma hakkı verip

./klasöryapıcı.sh

ile de çalıştırılabilir.

Kolay gelsin.

zeusmaster

Hocam çok teşekkür ediyorum.Ozaman birşey daha istemek gibi bir yüzsüzlük yapsam  :-[
Dimensions = 2

FlushMessages = yes

CalculationMode = gs

Units = atomic

FromScratch = yes

ExtraStates = 0

N = 48

%Species
"qd" | 1.0 | species_from_file | N | "eksi3_2_1500nm_uzunsekil_48x96_ha.csv"
%

%Coordinates
"qd" | 0 | 0 | no
%

%Occupations
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
%

SpinComponents = polarized

# P_c is the speed of light in atomic units.

P_c = 137.036

%StaticMagneticField
0 | 0 | 0.1457106*P_c*4.720
%

BoxShape = parallelepiped

%LSize
56 | 112 | 0
%

Spacing = 1.1

DerivativesOrder = 4

GyroMagneticRatio = 0

LCAOStart = lcao_none

TheoryLevel = dft

EigenSolver = cg
MaximumIter = 5000
ConvAbsEv   = 1e-5
TypeOfMixing = broyden

ParallelizationStrategy = par_domains

Output = potential + density + matrix_elements
OutputMatrixElements = ang_momentum
OutputHow = plane_z + matlab


yukarıda gördüğünüz inp dosyasının içeriğidir.Bu text dosyasının içindeki

0 | 0 | 0.1457106*P_c*4.720
kısmındaki 4.720 sayısını klasör adıyla değiştirme şansı nedir?
Şunu demek istiyorum.Örneğin 1.530 adlı bir klasör oluşturuldu içine .csv dosyası ve inp dosyası kopyalandı betik ile ardından inp dosyasındaki P_c*4.720 kısmı P_c*DOSYAADI olabilir mi?
Up and Running...

ironic

@bahdem, gözünüzden kaçtı galiba. Bu özelliği de eklemiştim desem. :)

ilgili kısım:
sed -i "/%StaticMagneticField/,/%/ s/\(P_c\).*/\1\*$deger/" \
"${deger}/$(basename "${sec_listesi[6]}")"


İletime düzenleme olarak geçmiştim. Pencereden Info dosyası olarak seçilecek dosya inp dosyası. Yaptığım denemelerde sorunsuz düzeltilmişti dosya adı.

zeusmaster

ozaman iki kere mükemmel insansın hocam  ;D kaçmış gözümden :(
Up and Running...

if

@bahdem, konu çözüldü mü şimdi?

zeusmaster

Alıntı yapılan: if - 30 Aralık 2011 - 14:39:58
@bahdem, konu çözüldü mü şimdi?
Kusura bakma konuyu etiketlemeyi unutmuşum :-[
Up and Running...