[Fwd: Re: çift kayıtları bulma]
Sanırım bu e-posta gitmedi, yada bana geri gelmedi. Ekte tekrar gönderiyorum. ---BeginMessage--- Sal, 2006-07-04 tarihinde 18:53 +0300 saatinde, Recai Oktaş yazdı: * Zeki Çatav [2006-07-04 10:32:05+0300] Sal, 2006-07-04 tarihinde 02:38 +0300 saatinde, Recai Oktaş yazdı: Zeki hocam, ekte hızlıca yazdığım bir perl betiği gönderiyorum. CPAN'ı [...] Bu betik çalıştı. Seçilen değişkene göre ayıklama işlemini başarıyla yapabildi. Ancak birşey daha sormak istiyorum. Seçilen değişken bir Ektekini deneyelim. XBase modülünde bu işi daha zarif yapmanın bir yolu vardır belki, ama bildiğimiz taraftan gitmek daha kestirme geldi. Yeni haliyle şöyle kullanacaksınız: # alan adları ve sütun noları görüntüler ./dbf_uniq.pl foo.dbf # 3-5 ve 9 sütunları ve FOO ile BAR arası kayıtları işler ./dbf_uniq.pl foo.dbf 3-5 FOO-BAR 9 Merhaba, Bu yöntem ile belli bir aralığı kontrol edip seçim yapamadım. Tek değişkene göre seçim yaptı ama bu yöntemle dosya fazla kırpıldı. 1007 kayıt içeren bir dosyayı bu yöntemle dosya numarası değişkenine göre tarayınca 402 kayda indirgedi. Oysa ilk önerdiğiniz (dünkü e-postanız) yöntemde aynı alana göre tarama 758 kayda indiriyordu. Aynı dosyayı .csv formatına çevirip Serdar Aytekin'in önerdiği yöntemle cat aaanv.csv | sort -t' ' | uniq -w10 dene1.txt işleyince 751 kayıt ile sonuçlanıyor. -w10 sadece dosya numarası kadar karaktere karşılık geliyor. Ayrıca bugünkü perl betiği değişken adlarını karışık sıralıyor, dünkü numarasız ama doğru sırayla dökmekteydi. Son perl betiği çıktısı .. Malformed UTF-8 character (byte 0xfe) at dbf_uniq2.pl line 54. Malformed UTF-8 character (unexpected non-continuation byte 0x73, immediately after start byte 0xfd) at dbf_uniq2.pl line 54. Malformed UTF-8 character (unexpected non-continuation byte 0x7a, immediately after start byte 0xfd) at dbf_uniq2.pl line 54. == [INDEKS] ALAN_ADI == [59] DESTEK[74] LBHT[63] OPRITM[95] CIKISTRH[50] ACIK3AAA[85] VENTILAT[76] YBRITM[3] SOYAD[94] YBCIKTRH [87] YBKOMP2[22] HT[30] SISTEM2[12] ISLM1TRH[17] AO [8] ILCE[93] YBCIKTUR[20] PAKET[42] TANI2AAA[33] GRFOZELL[68] KOMPTED2[11] ILKISLM1[86] YBKOMP1[6] ADRES [100] CIKACIK1[67] KOMPTED1[29] DURUM1[23] OBEZ[15] ILKISLM3[37] KAPAKNO[18] SIGARA[13] ILKISLM2[16] ISLM3TRH[35] GRFBOY[14] ISLM2TRH[46] ISLEM2AA[52] TRPERF [4] YAS[90] YBKOMPTE[47] ISLEM3AA[26] SEKEL[102] CIKACIK3[24] LIPID[73] YBLCO[57] OPERTRH[48] ACIK1AAA [92] YBTDP[34] GRFCAP[79] MKDSURE1[83] DREN1[10] PKODU [62] ASISTE[101] CIKACIK2[7] ADRES2[25] EMBSSS[55] TRPSURE[69] KOMPTED3[54] RSPSURE[60] INOTROP[105] PLKFORM[40] ASPSURE[106] YATISTRH[56] TSASURE[84] DREN2 [21] DM[27] EMBPERFR[32] GRFTCINS[2] AD[104] PLKTRH [89] YBKOMP4[58] AAANVRZM[78] YBMKDST1[38] REIMPLNT [75] YBCHF[5] CINS[49] ACIK2AAA[103] CIKISTAR[19] YIL[39] ASPERF[81] MKDSURE2[88] YBKOMP3[99] CIKKOMP3[41] TANI1AAA[28] SISTEM1[70] OPEX[31] DURUM2[45] ISLEM1AA [97] CIKKOMP1[80] YBMKDST2[77] YBISKEMI[1] DN[98] CIKKOMP2[91] YBKAN[53] TSA[96] CIKTURU[61] IABP[65] OPKOMP2[82] YBIDRAR[36] KAPAKKOD[51] RSPERF[43] TANI3AAA [72] YBGIRTRH[71] OPEXNDEN[66] OPKOMP3[9] IL[64] OPKOMP1 [44] TANI4AAA İlk perl betiği çıktısı Malformed UTF-8 character (byte 0xfe) at dbf_uniq.pl line 33. Malformed UTF-8 character (unexpected non-continuation byte 0xfd, immediately after start byte 0xf0) at dbf_uniq.pl line 33.Malformed UTF-8 character (unexpected non-continuation byte 0x64, immediately after start byte 0xfd) at dbf_uniq.pl line 33.Malformed UTF-8 character (unexpected non-continuation byte 0x69, immediately after start byte 0xe7) at dbf_uniq.pl line 33.Aadaki alanlardan biri seilmeli: DN AD SOYAD YAS CINS ADRES ADRES2 ILCE IL PKODU ILKISLM1 ISLM1TRH ILKISLM2 ISLM2TRH ILKISLM3 ISLM3TRH AO SIGARA YIL PAKET DM HT OBEZ LIPID EMBSSS SEKEL EMBPERFR SISTEM1 DURUM1 SISTEM2 DURUM2 GRFTCINS GRFOZELL GRFCAP GRFBOY KAPAKKOD KAPAKNO REIMPLNT ASPERF ASPSURE TANI1AAA TANI2AAA TANI3AAA TANI4AAA ISLEM1AA ISLEM2AA ISLEM3AA ACIK1AAA ACIK2AAA ACIK3AAA RSPERF TRPERF TSA RSPSURE TRPSURE TSASURE OPERTRH AAANVRZM DESTEK INOTROP IABP ASISTE OPRITM OPKOMP1 OPKOMP2 OPKOMP3 KOMPTED1 KOMPTED2 KOMPTED3 OPEX OPEXNDEN YBGIRTRH YBLCO LBHT YBCHF YBRITM YBISKEMI YBMKDST1 MKDSURE1 YBMKDST2 MKDSURE2 YBIDRAR DREN1 DREN2 VENTILAT YBKOMP1 YBKOMP2 YBKOMP3 YBKOMP4 YBKOMPTE YBKAN YBTDP YBCIKTUR YBCIKTRH CIKISTRH CIKTURU CIKKOMP1 CIKKOMP2 CIKKOMP3 CIKACIK1 CIKACIK2 CIKACIK3 CIKISTAR PLKTRH PLKFORM YATISTRH dbf formatında perl ile işlem yapmak ile csv
Re: [Fwd: Re: çift kayıtları bulma]
Çrş, 2006-07-05 tarihinde 18:52 +0300 saatinde, Recai Oktaş yazdı: Merhaba, Aralık dediğinizden ben mesela 3.ncü ve 15.nci sütunlar arasını anlıyorum. Eğer belirli bir sütundaki (alandaki) değer aralığını kastediyorsanız o farklı. Bu (basit) betik içeriğin ayrıntılarıyla ilgilenmez, sadece kayıtların (karakter bazlı bir karşılaştırmayla) mükerrer olup olmadığına bakar. Evet benim kasdettiğimde aynen 3. ve 15. sütunlar arası tanımına uyuyor. seçim yaptı ama bu yöntemle dosya fazla kırpıldı. 1007 kayıt içeren bir dosyayı bu yöntemle dosya numarası değişkenine göre tarayınca 402 kayda indirgedi. Oysa ilk önerdiğiniz (dünkü e-postanız) yöntemde aynı alana göre tarama 758 kayda indiriyordu. Evet, hata yapmışım. Ekteki sürümde bu hatanın olmaması lazım. Maalesef aynı şekilde 402 kayda indirgiyor. Aynı dosyayı .csv formatına çevirip Serdar Aytekin'in önerdiği yöntemle cat aaanv.csv | sort -t' ' | uniq -w10 dene1.txt işleyince 751 kayıt ile sonuçlanıyor. -w10 sadece dosya numarası kadar karaktere karşılık geliyor. Ayrıca bugünkü perl betiği değişken adlarını karışık sıralıyor, dünkü numarasız ama doğru sırayla dökmekteydi. Düzelttim. Evet bu kısım düzelmiş. Doğru sırada listeliyor. Son perl betiği çıktısı .. Malformed UTF-8 character (byte 0xfe) at dbf_uniq2.pl line 54. ^^ Bu uyarılar zararsız. Bazı iletiler için UTF-8 kodlu Türkçe karakterler kullanmıştım. Bu karakterler posta iletimi sırasında ISO'ya dönüştürülmüş görünüyor. Yenisini gzip korumalı olarak gönderiyorum. Yine sorun çıkarsa göz ardı edin. İşlemde çıkan tek hata bu oldu. UTF-8 karakter hatası kalktı. Use of uninitialized value in hash element at dbf_uniq.pl line 67. dbf formatında perl ile işlem yapmak ile csv formatında bash ile işlem yapmak öneriniz nedir? Bir kereye has bir işlem ise bu, en basit (ve sizin tarafınızdan müdahale edilebilir) olanını, yani Serdar'ın önerdiği yöntemi tercih edebilirsiniz. Ama böyle başka bir çok dosya varsa ve gelecekte bu durumla tekrar karşılaşma ihtimaliniz varsa dbf üzerinden gitmek daha uygun olabilir. Bu dosyalar bizim hasta veri tabanı programımızın sorgu sonucu oluşturduğu bir veri alt grubu. Butür dosyalar hep olacak, bende o nedenle sizin önerdiğiniz yöntem ile gitmeyi düşünerek size zahmet vermeye devam etmekteyim. Ancak eğer isterseniz sizi daha fazla yormaktan vazgeçip diğer yöntemi kullanmaya devam edebilirim. Teşekkürler. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: çift kayıtları bulma
Sal, 2006-07-04 tarihinde 00:26 +0300 saatinde, Serdar Aytekin yazdı: # cat dosya_ismi | sort | uniq -t' ' -W1 veya; # cat dosya_ismi | sort -t' ' | uniq -W1 seklinde deneyebilir misiniz? -- Saygilarimla, Serdar Aytekin Merhaba, Bu komutlar işe yaradı. Ayrıca -w (küçük harf) parametresi ile istediğim kadar karakteri (baştan başlayıp sıralı olarak) karşılaştırmaya dahil edebildim. Teşekkür ederim. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: çift kayıtları bulma
Sal, 2006-07-04 tarihinde 02:38 +0300 saatinde, Recai Oktaş yazdı: Zeki hocam, ekte hızlıca yazdığım bir perl betiği gönderiyorum. CPAN'ı biraz araştırdım (ne ararsanız var), DBase dosyalarını okuyan bir modül mevcut: XBase ve Debian paketi de var bunun. Önce bu paketi kurmalısınız: apt-get install libdbd-xbase-perl Paketle birlikte dbf_dump adında bir araç geliyor, veritabanının metin dökümünü alabiliyorsunuz (seçenekler için bk. dbf_dump(1)): dbf_dump foo.dbf foo.txt Ekteki betik, veritabanının yedeğini aldıktan sonra, seçtiğiniz bir alana göre (sizin ifadenizle değişken) mükerrer kayıtları siliyor. foo.dbf dosyasındaki alanları görmek için: dbf_uniq.pl foo.dbf Bu şekilde seçtiğiniz bir FOO alanına göre mükerrer kayıtları elemek için: dbf_uniq.pl foo.dbf FOO Bir deneyin gerekirse kurcalamaya devam ederim. Merhaba, Bu betik çalıştı. Seçilen değişkene göre ayıklama işlemini başarıyla yapabildi. Ancak birşey daha sormak istiyorum. Seçilen değişken bir aralık veya birden fazla alan olabilir mi? Teşekkür ederim. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: çift kayıtları bulma
Pazartesi 03 Temmuz 2006 20:11 tarihinde, Zeki Çatav şunları yazmıştı: Merhaba, Bir veri dosyası (halen .dbf formatında ama gerekirse uygun başka formatlara da çevirilebilecek) içinde yer alan kayıtlardan (~ 1000 kayıt ve her kayda ait ~ 250 değişken) çift olanları seçip her kaydı tek hale getirebilecek bir yöntem için önerilerinizi bekliyorum. Çift kayıt kararını bir kayda ait tüm değişkenlere bakarak vermeli. Veya olanak dahilindeyse ben değişkenlerden seçim yapabilirim. Openoffice hesap çizelgesi ile yapabilir miyim diye baktım ama işe yarayacak bir seçenek göremedim. Eskiden excel içinde find duplicate benzeri komut ile bu tür bir seçenek vardı diye hatırlıyorum ama openoffice içinde de olmadığına göre yanlış hatırlıyor olmalıyım. Teşekkürler. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi dbf dosya biçimi nasıldır ve hangi uygulamalar tarafından işlenir bilemiyorum ancak eğer dosyanızı csv dosya biçimine çevirebilirseniz ve ilgili değişkenlerin her biri tek bir satırda ise; (a,b,c gibi) cat sizindosyanız.csv | uniq komutunu kullanabilirsiniz. -- Saygılar İyi çalışmalar Timu EREN (a.k.a selam) pgpKvNhUhlifO.pgp Description: PGP signature
Re: çift kayıtları bulma
Pzt, 2006-07-03 tarihinde 22:04 +0300 saatinde, Timu EREN yazdı: dbf dosya biçimi nasıldır ve hangi uygulamalar tarafından işlenir bilemiyorum ancak eğer dosyanızı csv dosya biçimine çevirebilirseniz ve ilgili değişkenlerin her biri tek bir satırda ise; (a,b,c gibi) cat sizindosyanız.csv | uniq komutunu kullanabilirsiniz. Merhaba, Dosya eklentisi olarak .dbf eski dbase adlı veri tabanı programının eklentisidir. Hemen her türlü veri tabanı programı tarafından ve hesap tablosu yazılımlarınca açılabilir ve istenen forma çevirmekte bu nedenle kolaydır. Yöntemi denedim işe yarıyor ancak takıldığım bir nokta olduğunu fark ettim. Değişkenlerden sadece ilki veya ilk 3-4 adedine bakarak aynı ayıklama işlemini yapmak mümkün müdür? Teşekkürler. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: çift kayıtları bulma
Merhaba... Pazartesi 03 Temmuz 2006 22:47 tarihinde, Zeki Çatav şunları yazmıştı: [kesildi] Yöntemi denedim işe yarıyor ancak takıldığım bir nokta olduğunu fark ettim. Değişkenlerden sadece ilki veya ilk 3-4 adedine bakarak aynı ayıklama işlemini yapmak mümkün müdür? Teşekkürler. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi [/kesildi] Elbette, burada size yardımcı olacak komut cut komutu olacaktır, echo 'a';'b';'c;' | cut -d';' -f2 komutu sadece 'b' verecektir -f parametresinden hangi harfi almak istediğinizi söyleyebilirsiniz (yukarıdaki örnek için), Eğer birden fazla harfi almak isterseniz (yine sadece yukarıdaki örnek için geçerlidir) -f1,2 demeniz yeterlidir. Bu size 'a';'b'; sonucunu verecektir. Daha fazla bilgi için man cut yada cut --help komutunu kullanın. -- Saygılar İyi çalışmalar Timu EREN (a.k.a selam) pgppDSldKnw4r.pgp Description: PGP signature
Re: çift kayıtları bulma
Pzt, 2006-07-03 tarihinde 23:14 +0300 saatinde, Timu EREN yazdı: Elbette, burada size yardımcı olacak komut cut komutu olacaktır, echo 'a';'b';'c;' | cut -d';' -f2 komutu sadece 'b' verecektir -f parametresinden hangi harfi almak istediğinizi söyleyebilirsiniz (yukarıdaki örnek için), Eğer birden fazla harfi almak isterseniz (yine sadece yukarıdaki örnek için geçerlidir) -f1,2 demeniz yeterlidir. Bu size 'a';'b'; sonucunu verecektir. Daha fazla bilgi için man cut yada cut --help komutunu kullanın. Merhaba, Sanırım istediğimi tam anlatamadım. Cut sadece belli bir bölümü seçip listeliyor. Ben bu csv dosyasında yer alan kayıtlardan ilk sütundaki değişkene bakıp eğer birden fazla aynı değişken içeren kayıt varsa bunu bire indirgemek istiyorum. Yani ilk değişken kontrol edilip o değişken sadece bir kez dosyada kullanılacak şekilde kayıtları sadeleştirmek, verilerin gerikalan değişkenlerini ve dosyayı korumak istiyorum. 123 aaa bbb ccc ddd ... nnn 234 abc def ghi hjk ... nnn 123 aaa bbb ccc def ... nnn şeklindeki dosya sonuçta; 123 aaa bbb ccc ddd ... nnn 234 abc def ghi hjk ... nnn şeklinde sadeleşecek. dosya ilk değişkene göre uniq indekslenmiş gibi olacak. İlk değişkene göre tekrarlayan satırlar silinecek. İyi çalışmalar. -- Zeki Çatav [EMAIL PROTECTED] Türkiye Yüksek İhtisas Hastanesi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: çift kayıtları bulma
Merhaba, [...] Ben bu csv dosyasında yer alan kayıtlardan ilk sütundaki değişkene bakıp eğer birden fazla aynı değişken içeren kayıt varsa bunu bire indirgemek istiyorum. Yani ilk değişken kontrol edilip o değişken sadece bir kez dosyada kullanılacak şekilde kayıtları sadeleştirmek, verilerin gerikalan değişkenlerini ve dosyayı korumak istiyorum. 123 aaa bbb ccc ddd ... nnn 234 abc def ghi hjk ... nnn 123 aaa bbb ccc def ... nnn şeklindeki dosya sonuçta; 123 aaa bbb ccc ddd ... nnn 234 abc def ghi hjk ... nnn şeklinde sadeleşecek. dosya ilk değişkene göre uniq indekslenmiş gibi olacak. İlk değişkene göre tekrarlayan satırlar silinecek. # cat dosya_ismi | sort | uniq -t' ' -W1 veya; # cat dosya_ismi | sort -t' ' | uniq -W1 seklinde deneyebilir misiniz? -- Saygilarimla, Serdar Aytekin -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]