Temel kullanım ile awk

Codx

Katılımcı Üye
30 Tem 2017
309
1


Merhabalar, iyi forumlar herkese.

Linuxdaki awk komutundan bahsedeceğiz, örnekler yapacağız ve güzel bir kapanış ile bitireceğiz.

Öncesinde belirtmek isterimki awk sadece bir komut değil bir script dilidir.

awk'yi önce printf ile kullanalım. İçerisinde bunların bolduğu bir txt dosyam var.

Kod:
1 Codx 100
2 Codx 200
3 Codx 300

Codx sadece ortadaki nick kısmını ekrana bastırmak isiyorum. Bunun için,



string'i ekrana bastır ve \n olduğu için bir alt satırdan devam et.

Sadece dosyadan okumaz aynı zamanda bir sabit veriyi de okuyabilir.

echo komutu ile bir çıktı bastırıyorum ve bu çıktıyı awk ile düzenliyorum.



echo 'Turk Hack Team'den sonra gelen | (pipe) işareti soldakinin çıktısını sağdakinin input olarak almasını sağlar.

awk ile ekrana çıktı bastırırken replace de yapabilirsiniz.

Bir txt dosyası daha oluşturup içine rastgele karakterler yazıyorum ve bunları - (hypen) ile ayırıyorum.

Kod:
SJ84-DFI30-5F1F-B48B-6DFG-28V5

İçerisinde bu karakterlerin olduğu bir metnim var aradaki - işaretlerinden kurtulmak istiyorum yada aralarında boşluk vardı bu şekle çevirmek istiyorum hiç fark etmez. Yapmamız gereken,



FS replace edilmek istenen karakteri alır, OFS replace edilecek karakteri alır.Bunun ile birlikte bu örnekte sadece FS versek OFS vermezsek yine aynı çıktıyı alırdık.

ls -l yazıp dosyalar hakkında detaylı bilgi görüntüleyebiliyorum. İçerisinden istediğim verileri alabilirim çünkü ihtiyacım olan işimi görür diğerlerine ihtiyaç duymayız.

ls -l yazdığım zaman 9.sırada dosya adı 5.sırada dosya boyutu yer alıyor. Bu bilgileri ayıklayıp ekrana bastırmak istiyorum.



Begin kelimesinin sonrasında printf ile bastırırken ilk gelecek olan değerlerin name ve size kelimleri olmasını sağlıyorum en sonundaki \n ile de alt satıra konumlanıyoruz. Sonra önce 9.sıradakini peşinden 5.sıradakini ekrana bastırıyorum.

customer isimli bir txt dosyası oluşturup içerisine şu verileri giriyoruz

Kod:
Id, Name, email, phone
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, [email protected], (542) 986-2390

Şimdi bu dosyayı formatlayalım.



Biz burada şunu yaptık, alanları ayırmak için , işaretinin kullanıldığını belirttik ikinci alanı bastırdık.

Şimdi çıktımız üzerinde biraz daha oynayalım. İlk satır bizim başlığımz, bu sefer bunu görmek istemiyoruz. 1.satırdan sonrasını yazdıralım. Bunu NR>1 ile yapacağız.



Şimdi bir de awk uzantılı dosya ile yapalım. test.awk adında bir dosya oluşturup içerisine şunları yazıyorum,

Kod:
 BEGIN {FS = ","} {printf "%s(%s)\n", $2, $1}

Şimdi bunu -f ile kullanalım

Kod:
 awk -f test.awk customer.txt



Çıktı arasında bir kelime aramak istediğimiz zaman /kelime/ şeklinde bir kullanım sağlayabiliriz. 3 kelimeyi farklı ilk harfler ile başlatıyoruz sonrasında ise bir adet farklı kelime yazıyorum bunları çıktı olarak bastırıcaz.

Baş harfleri v-l-c ile başlayıp devamı ar olan kelimeleri basıyoruz.



Belli bir kelime ile başlayanları da alabiriz. Şu şekilde



Belirli bir kelimeyi satırların sonunda arayacak olursak eğer sonuna $ işareti koymamız yeterli olacaktır. Hatırlarsanız bu $^ gibi işaretler vimde de kullanılıyorlar.



/[x]yz]/ şeklinde başı belli bir harfle başlayanları aramıştık. Başında [] içerisindeki harfin olmaması için /[^x]yz/ şeklinde komut girmemiz gerekiyor.

tolower() fonksiyonu ile kelimenin eşleştiği satırı bastırabiliriz. İçerisinde hack kelimesi geçen 2 satır yazdıracağım. Bir adet hack kelimesinin geçmediği satırımız olacak.

tolower() ile hack kelimesi geçen satırları bastıracağız bununla birlikte her satırın kaç kelime olduğunu da NF ile yazdıracağız.

Kod:
  [USER=813568]Codx[/USER]:~$ echo -e "Hack Team\nHacking Wifi\nGenious" | awk 'tolower($0) ~ /^hack/;'

Çıktısı:
Hack Team
Hacking Wifi

Şeklinde olacaktır. Eğer /^hack/ {print NF} yazarsak çıktı olarak gelen satırlarda kaç kelime olduğu basılacaktır. Ne işimize yarar bilmiyorum ama bazı şeyler bir kere öğrenilir ama bir an gelir hayat kurtarır.

Kod:
  [USER=813568]Codx[/USER]:~$ echo -e "Hack Team\nHacking Wifi\nGenious" | awk 'tolower($0) ~ /^hack/ {print NF}'
2
2

Son olarak ortamlarda havamızın olabileceği bir şekilde kullanalım. :)

Ben çokça vim kullanıyorum, hatta kod yazarken bile vscode içine yüklediğim vim eklentisi ile klavyede hızlı hızlı işlerimi hallediyorum. İnsanlar bazen garipseyebiliyorlar. Sonuçta herkes yeniliklere açık değil veya sonunda bazı şeylerin daha kolay olacağını bilse bile alışma sürecinden korkularına pek yanaşmayabiliyorlar.

Her neyse bende onların garipsediğini gördüğüm zaman anlamakta zorlandıkları şeyler yaparak işlerimi kısa kısa işlemler ile halletmeyi seviyorum.

Vimden çıkarken genellikle :wq, :x veya normal moddayken ZZ yaparak kaydedip çıkabiliriz. Normal insanlar böyle çıkar. Bir de şu şekilde bir çıkışımız var,

Before:



After:



Not bunu tomnomnom'dan öğrendim. Vim kullanma şekline hayran kalmıştım, sonrasında bende öğrenince bırakamadım. :)

Okuduğunuz için teşekkür eder iyi forumlar dilerim.

 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.