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.
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
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?
İş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.
Zahmetlerin için teşekkürler. Eline sağlık tekrar.