[Çözüldü] sed kullanımı nasil?

Başlatan furina, 03 Mart 2015 - 17:13:34

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

furina

Merhaba,

Bu komutun kullanımı hakkında bir bilgim yok. Ancak yapmak istediğim şey bir csv dosyasının içinde

eposta@adresi.com,Ad Gobekadi Soyad
eposta@adresi.com,Ad Soyad

şeklinde bulunan kayıtları sed komutu yada başka bir komut kullanarak çıktısı

/opt/zimbra/bin/zmprov ca eposta@adresi.com password givenName "Ad Gobekadi" sn "Soyad" displayName "Ad Gobekadi Soyad"
/opt/zimbra/bin/zmprov ca eposta@adresi.com password givenName "Ad" sn "Soyad" displayName "Ad Soyad"

olacak şekilde bir dosyaya yazdırmak. Bu konuda yardımcı olabilirseniz beni bayağı bir işten kurtarmış olursunuz.

Teşekkürler.

heartsmagic

Merhaba.

sed diye ha deyince olacak şey değil bu. İlk olarak aklıma awk gelmişti ki onunla da olur ancak doğrudan kabukla yapmak daha kolay gibi. Biraz bakınınca şu çıktı ortaya.

while read line
        do
        IFS=","
        set -- $line
        eposta=$1
        unset IFS
        IFS=" "
        set -- $2
        if [ -z "$3" ]
        then
                ad=$1
                soyad=$2
        else
                ad=$1" "$2
                soyad=$3
        fi

echo "/opt/zimbra/bin/zmprov ca \"$eposta\" password givenName \"$ad\" sn \"$soyad\" displayName \"$ad $soyad\"" >> son_dosya


done < ilk_dosya


Önce IFS'yi "," (virgül) olarak ayarlıyor ve bölüyoruz satırı. İlk aldığımız değer eposta adresi oluyor. Sonra IFS'yi " " (boşluk) olacak şekilde ayarlayıp ad soyad kısmına geçiyoruz. Basit bir if ile üçüncü değişken var mı diye bakıyoruz, olduğu ve olmadığı duruma göre ad soyad ataması yapıyoruz. Sonra da değerleri dosyaya basıyoruz. Burada IFS'yi ilk olarak satırın kendisi ($read) üzerinde uyguluyoruz. Daha sonra IFS'yi bu satırdan aldığımız ikinci değişken ($2) için uyguluyoruz. Aklına takılan bir şey olursa sorarsın yine.

ilk_dosya dediğimiz alacağın dosya, son_dosya dediğimiz de oluşturulan dosya. Daha basit ve hızlı bir yolu olabilir belki, fikri olan ekler. Şu durumda 16000 satırlık bir dosyada şu değerler alındı:
wc -l ilk_dosya
16016 ilk_dosya

Sonuç:
time ./betik

real    0m2.311s
user    0m1.052s
sys     0m0.201s





Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

furina

#2
Eline sağlık tam istediğim gibi bir dosya üretti. sayende 500+ hesap açmış oldum. Çok teşekkür ederim. :D:D


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 04 Mart 2015 - 08:05:09

İşimi hallettim problem kalmadı. Şöyle bir şey isteyebilir miyim? Verilecek ilk_dosya adını kodun içinde değilde komut satırında parametre olarak verebilirsem bunu daha sonraki zamanlarda daha kolay kullanabilirim. Böyle bir değişiklik yapabilir misin?

heartsmagic

İşin çoğunudan sonra azıcık bakınsan sana faydalı olurdu aslında :) Sonraki işler için başkasına bel bağlamadan iş görebilirsin böylece. Kabuk programlama aşırı zor değil, biraz bakılırsa rahatlıkla temel şeyler öğrenilebilir. Ben de çok fazla bildiğimi söyleyemem, böyle sorular geldikçe ya da kendi ihtiyacım olduğunda bakıp bir şeyler karalıyorum. Hani söylemem o, İngilizce varsa hiç ama hiç sorun olmaz, Türkçe ile bile yapılabilir bazı şeyler. 

done < $1

olarak değiştirirsen ilgili satırı istediğin şey olur. Kafa karışmasın ama buradaki $1 döngünün içine girildikten sonra okunan değişkenlerden değil. Argüman olarak betiğe verilen dosya ismine denk geliyor. $0 da betiğin ismine denk gelir hatta.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

furina

Zahmetlerin için teşekkürler. Eline sağlık tekrar.