Monday, July 28, 2008

sed ile islem yapmak

sed (string editor) dosyalarda satır islemleri yaparken cok yararlı.
örneğin bir dosya içinde geçen iki kelime arasını yazdırmak için;
sed -n '/kelime1/,/kelime2/p' dosyaadı

bir dosya içindeki tüm kelime1'leri kelime2 yapmak için;
sed 's/kelime1/kelime2/g' dosyaadı

bir dosyada kelime1 geçen satırları silmek için;
sed '/kelime1/d' dosyaadı

bir dosyanın her satırının başına bir kelime koymak için;
sed 's/^/kelime/g' dosyaadı

yazmak yeterli.

Thursday, July 24, 2008

Buyuk boyutta datalari duzenlemek, istedigim formata sokmak icin sed'i (String editor) cok kullaniyorum. sed ile Shell script icinde sed kullanarak bir dosyanin belli bir paternini shell'de donen bir degiskenle degistirmek istedigimde asagidaki gibi bir script isi cozuyor. 

awk '{print $0}' dosya.txt | while read satir ; do ## dosyayi satir satir okur. 
 regname=`echo $satir| awk -F "|" '{print $2}'` ## dosyanin 2. kolonunu regname degiskenine atar.       regname_new=`echo $regname|awk -F "/" '{print $1}' ` ## yeni atanacak degiskeni set eder. 
 echo $satir|sed "s:$regname:$regname_new:" >> dosya.txt.new ## degistirme islemi 
done
Suse Linux 'ta farkli ls -l sonuclari
Bu gun suse linux 10'da bir shell scriptle ugrasirken bir sey farkettim;
ls -l komutunu komut satirindan elle girdiginizde date kolonu; 2008-07-24
aynı komutu shell script icinde yazip crontab'tan calistirdiginizda ; Jul 24
gibi farkli sonuclar veriyor. Bu da date kolonunu referans alarak islem yaparken sorun olabiliyor.
Cozum;
shell scriptteki komutu
ls -l --time-style= +%Y-%m-%d
olarak yazmak. Bu komut size hep ayni ciktiyi vermeyi sagliyor.