Belge

40 Pratik ve Kullanışlı awk Komutu

AWK, kökeni Unix’in ilk günlerine kadar uzanan güçlü bir veri odaklı programlama dilidir. Başlangıçta ‘tek satırlık’ programlar yazmak için geliştirildi, ancak o zamandan beri tam teşekküllü bir programlama diline dönüştü. AWK, adını yazarlarının baş harfleri olan Aho, Weinberger ve Kernighan’dan alır. Linux ve diğer Unix sistemlerindeki awk komutu, AWK betiklerini çalıştıran yorumlayıcıyı çağırır.

Diğerlerinin yanı sıra gawk (GNU awk), mawk (Minimal awk) ve nawk (Yeni awk) gibi son sistemlerde çeşitli awk uygulamaları mevcuttur. Awk’da ustalaşmak istiyorsanız aşağıdaki örneklere göz atın.

AWK Programlarını Anlama


Awk’da yazılan programlar, sadece bir çift kalıp ve eylem olan kurallardan oluşur. Desenler bir küme ayracı {} içinde gruplandırılır ve awk desenle eşleşen metinler bulduğunda eylem kısmı tetiklenir. Awk, tek satırlık yazılar yazmak için geliştirilmiş olsa da, deneyimli kullanıcılar onunla kolayca karmaşık komut dosyaları yazabilir.

awk command in Linux

AWK programları, büyük ölçekli dosya işleme için çok kullanışlıdır. Özel karakterler ve ayırıcılar kullanarak metin alanlarını tanımlar. Ayrıca diziler ve döngüler gibi üst düzey programlama yapıları sunar. Bu nedenle, düz awk kullanarak sağlam programlar yazmak çok uygundur.

Linux’ta awk Komutunun Pratik Örnekleri


Yöneticiler normalde diğer dosya manipülasyon türlerinin yanı sıra veri çıkarma ve raporlama için awk kullanır. Aşağıda, awk’ı daha ayrıntılı olarak tartıştık. Komutları dikkatlice izleyin ve tam bir anlayış için terminalinizde deneyin.

1. Metin Çıktısından Belirli Alanları Yazdırın


En yaygın kullanılan Linux komutları, çıktılarını çeşitli alanları kullanarak görüntüler. Normalde, bu tür verilerden belirli bir alanı çıkarmak için Linux cut komutunu kullanırız. Ancak, aşağıdaki komut, awk komutunu kullanarak bunu nasıl yapacağınızı gösterir.

$ who | awk '{print $1}'

Bu komut, who komutunun çıktısından yalnızca ilk alanı görüntüler. Böylece, şu anda oturum açmış olan tüm kullanıcıların kullanıcı adlarını alacaksınız. Burada, $1 ilk alanı temsil eder. N’inci alanı çıkarmak istiyorsanız $N kullanmanız gerekir.

2. Metin Çıktısından Birden Çok Alan Yazdırın


Awk yorumlayıcısı, istediğimiz sayıda alanı yazdırmamıza izin verir. Aşağıdaki örnekler, who komutunun çıktısından ilk iki alanı nasıl çıkaracağımızı gösterir.

$ who | awk '{print $1, $2}'

Çıktı alanlarının sırasını da kontrol edebilirsiniz. Aşağıdaki örnekte ilk olarak who komutu tarafından oluşturulan ikinci sütun ve ardından ikinci alandaki ilk sütun görüntülenir.

$ who | awk '{print $2, $1}'

Tüm verileri görüntülemek için alan parametrelerini ($N) dışarıda bırakmanız yeterlidir.

3. BEGIN İfadelerini Kullanın


BEGIN deyimi, kullanıcıların çıktıdaki bazı bilinen bilgileri yazdırmasına olanak tanır. Genellikle awk tarafından oluşturulan çıktı verilerini biçimlendirmek için kullanılır. Bu ifadenin sözdizimi aşağıda gösterilmiştir.

BEGIN { Actions}
{ACTION}

BAŞLANGIÇ bölümünü oluşturan eylemler her zaman tetiklenir. Ardından, awk kalan satırları tek tek okur ve bir şey yapılması gerekip gerekmediğine bakar.

$ who | awk 'BEGIN {print "User\tFrom"} {print $1, $2}'

Yukarıdaki komut, who komutunun çıktısından ayıklanan iki çıkış alanını etiketleyecektir.

4. END İfadelerini Kullanın


İşleminizin sonunda belirli eylemlerin her zaman gerçekleştirildiğinden emin olmak için END deyimini de kullanabilirsiniz. END bölümünü ana eylem kümesinden sonra yerleştirmeniz yeterlidir.

$ who | awk 'BEGIN {print "User\tFrom"} {print $1, $2} END {print "--COMPLETED--"}'

Yukarıdaki komut, verilen dizeyi çıktının sonuna ekleyecektir.

5. Desenleri Kullanarak Arama Yapın


Awk’ın çalışmalarının büyük bir kısmı desen eşleştirme ve normal ifadeyi içerir. Daha önce tartıştığımız gibi, awk her giriş satırındaki kalıpları arar ve eylemi yalnızca bir eşleşme tetiklendiğinde yürütür. Önceki kurallarımız sadece eylemlerden oluşuyordu. Aşağıda, Linux’ta awk komutunu kullanarak desen eşleştirmenin temellerini gösterdik.

$ who | awk '/mary/ {print}'

Bu komut, mary kullanıcısının şu anda oturum açıp açmadığını görecektir. Herhangi bir eşleşme bulunursa tüm satırın çıktısını alacaktır.

6. Dosyalardan Bilgi Çıkarın


Awk komutu dosyalarla çok iyi çalışır ve karmaşık dosya işleme görevleri için kullanılabilir. Aşağıdaki komut, awk’nin dosyaları nasıl işlediğini gösterir.

$ awk '/hello/ {print}' /usr/share/dict/american-english

Bu komut, amerikan-ingilizce sözlük dosyasında ‘hello’ kalıbını arar. Çoğu Linux tabanlı dağıtımda mevcuttur. Böylece, bu dosya üzerinde awk programlarını kolayca deneyebilirsiniz.

awk pattern search

7. AWK Komut Dosyasını Kaynak Dosyadan Okuyun


Tek satırlık programlar yazmak yararlı olsa da, tamamen awk kullanarak büyük programlar da yazabilirsiniz. Bunları kaydetmek ve kaynak dosyayı kullanarak programınızı çalıştırmak isteyeceksiniz.

$ awk -f script-file
$ awk --file script-file

-f veya –file seçeneği, program dosyasını belirtmemizi sağlar. Ancak, Linux kabuğu program kodunu bu şekilde yorumlamayacağından, komut dosyası içinde tırnak işaretleri (‘ ‘) kullanmanıza gerek yoktur.

8. Giriş Alanı Ayırıcısını Ayarlayın


Alan ayırıcısı, giriş kaydını bölen bir sınırlayıcıdır. -F veya –field-separator seçeneğini kullanarak alan ayırıcıları awk olarak kolayca belirleyebiliriz. Bunun nasıl çalıştığını görmek için aşağıdaki komutlara göz atın.

$ echo "This-is-a-simple-example" | awk -F - ' {print $1} '
$ echo "This-is-a-simple-example" | awk --field-separator - ' {print $1} '

Linux’ta tek satırlık awk komutu yerine komut dosyalarını kullanırken aynı şekilde çalışır.

9. Duruma Göre Bilgileri Yazdırın


Linux cut komutunu önceki bir kılavuzda tartışmıştık. Şimdi, yalnızca belirli kriterler eşleştiğinde awk kullanarak bilgileri nasıl çıkaracağınızı göstereceğiz. Bu kılavuzda kullandığımız test dosyasının aynısını kullanacağız. Öyleyse oraya gidin ve test.txt dosyasının bir kopyasını alın.

$ awk '$4 > 50' test.txt

Bu komut, 50 milyondan fazla nüfusa sahip olan test.txt dosyasından tüm ulusları yazdıracaktır.

10. Normal İfadeleri Karşılaştırarak Bilgileri Yazdırın


Aşağıdaki awk komutu, herhangi bir satırın üçüncü alanının ‘Lira’ desenini içerip içermediğini kontrol eder ve bir eşleşme bulunursa tüm satırı yazdırır. Yine, Linux cut komutunu göstermek için kullanılan test.txt dosyasını kullanıyoruz. Bu nedenle, devam etmeden önce bu dosyaya sahip olduğunuzdan emin olun.

$ awk '$3 ~ /Lira/' test.txt

İsterseniz herhangi bir maçın yalnızca belirli bir bölümünü yazdırmayı seçebilirsiniz.

11. Girişteki toplam satır sayısını sayın


Awk komutu, birçok gelişmiş şeyi kolayca yapmamızı sağlayan birçok özel amaçlı değişkene sahiptir. Böyle bir değişken, geçerli satır numarasını içeren NR’dir.

$ awk 'END {print NR} ' test.txt

Bu komut, test.txt dosyamızda kaç satır olduğunu çıkaracaktır. Önce her satırı yineler ve END’e ulaştığında, bu durumda toplam satır sayısını içeren NR değerini yazdırır.

12. Çıktı Alanı Ayırıcısını Ayarlayın


Daha önce, -F veya –field-separator seçeneğini kullanarak giriş alanı ayırıcılarının nasıl seçileceğini göstermiştik. awk komutu ayrıca çıktı alanı ayırıcısını belirtmemize izin verir. Aşağıdaki örnek, pratik bir örnek kullanarak bunu göstermektedir.

$ date | awk 'OFS="-" {print$2,$3,$6}'

Bu komut, gg-aa-yy biçimini kullanarak geçerli tarihi yazdırır. Varsayılan çıktının nasıl göründüğünü görmek için tarih programını awk olmadan çalıştırın.

13. If Yapısını Kullanma


Diğer popüler programlama dilleri gibi, awk da kullanıcılara if-else yapılarını sağlar. awk içindeki if ifadesi aşağıdaki sözdizimine sahiptir.

if (expression)
{
  first_action
  second_action
}

İlgili eylemler yalnızca koşullu ifade doğruysa gerçekleştirilir. Aşağıdaki örnek, test.txt referans dosyamızı kullanarak bunu göstermektedir.

$ awk '{ if ($4>100) print }' test.txt

Girintiyi kesinlikle korumanıza gerek yoktur.

14. If-Else Yapılarını Kullanma


Aşağıdaki sözdizimini kullanarak kullanışlı if-else merdivenleri oluşturabilirsiniz. Dinamik verilerle ilgilenen karmaşık awk komut dosyaları tasarlarken kullanışlıdırlar.

if (expression)
  first_action
else
  second_action
$ awk '{ if ($4>100) print; else print }' test.txt

Yukarıdaki komut, dördüncü alan her satır için 100’den büyük olmadığından tüm referans dosyasını yazdıracaktır.

15. Alan genişliğini ayarlayın


Bazen, girdi verileri oldukça dağınıktır ve kullanıcılar bunları raporlarında görselleştirmekte zorlanabilir. Neyse ki awk, boşluklarla ayrılmış bir genişlik listesi tanımlamamıza izin veren FIELDWIDTHS adlı güçlü bir yerleşik değişken sağlar.

$ echo 5675784464657 | awk 'BEGIN {FIELDWIDTHS= "3 4 5"} {print $1, $2, $3}'

Çıktı alanı genişliğini tam olarak istediğimiz gibi kontrol edebildiğimiz için dağınık verileri ayrıştırırken çok kullanışlıdır.

field width in awk

16. Kayıt Ayırıcıyı Ayarlayın


RS veya Kayıt Ayırıcı, kayıtların nasıl ayrılacağını belirlememizi sağlayan başka bir yerleşik değişkendir. Önce bu awk değişkeninin işleyişini gösterecek bir dosya oluşturalım.

$ cat new.txt
Melinda James

23 New Hampshire

(222) 466-1234

Daniel James

99 Phonenix Road

(322) 677-3412
$ awk 'BEGIN{FS="\n"; RS=""} {print $1,$3}' new.txt

Bu komut belgeyi ayrıştıracak ve iki kişinin adını ve adresini tükürecektir.

17. Yazdırma Ortamı Değişkenleri


Linux’taki awk komutu, ENVIRON değişkenini kullanarak ortam değişkenlerini kolayca yazdırmamızı sağlar. Aşağıdaki komut, PATH değişkeninin içeriğini yazdırmak için bunun nasıl kullanılacağını gösterir.

$ awk 'BEGIN{ print ENVIRON["PATH"] }'

ENVIRON değişkeninin bağımsız değişkenini değiştirerek herhangi bir ortam değişkeninin içeriğini yazdırabilirsiniz. Aşağıdaki komut, HOME ortam değişkeninin değerini yazdırır.

$ awk 'BEGIN{ print ENVIRON["HOME"] }'

18. Çıktıdan Bazı Alanları Çıkarın


awk komutu, çıktımızdan belirli satırları çıkarmamızı sağlar. Aşağıdaki komut, test .txt referans dosyamızı kullanarak bunu gösterecektir.

$ awk -F":" '{$2=""; print}' test.txt

Bu komut, her ülke için başkentin adını içeren dosyamızın ikinci sütununu atlayacaktır. Ayrıca, bir sonraki komutta gösterildiği gibi birden fazla alanı atlayabilirsiniz.

$ awk -F":" '{$2="";$3="";print}' test.txt

19. Boş Satırları Kaldırın


Bazen, veriler çok fazla boş satır içerebilir. Boş satırları oldukça kolay bir şekilde kaldırmak için awk komutunu kullanabilirsiniz. Bunun pratikte nasıl çalıştığını görmek için bir sonraki komuta göz atın.

$ awk '/^[ \t]*$/{next}{print}' new.txt

Basit bir normal ifade ve next adlı yerleşik bir awk kullanarak dosyadaki tüm boş satırları yeni kaldırdık.txt

20. Sondaki boşlukları kaldırın


Birçok Linux komutunun çıktısı, sondaki boşluklar içerir. Boşluklar ve sekmeler gibi boşlukları kaldırmak için Linux’ta awk komutunu kullanabiliriz. Awk kullanarak bu tür sorunların nasıl çözüleceğini görmek için aşağıdaki komuta göz atın.

$ awk '{sub(/[ \t]*$/, "");print}' new.txt test.txt

Referans dosyalarımıza sondaki bazı boşluklar ekleyin ve awk’nin bunları başarıyla kaldırıp kaldırmadığını doğrulayın. Bunu makinemde başarıyla yaptı.

21. Her satırdaki alan sayısını kontrol edin


Basit bir awk tek astar kullanarak bir satırda kaç alan olduğunu kolayca kontrol edebiliriz. Bunu yapmanın birçok yolu var, ancak bu görev için awk’nın yerleşik değişkenlerinden bazılarını kullanacağız. NR değişkeni bize satır numarasını, NF değişkeni ise alan sayısını verir.

$ awk '{print NR,"-->",NF}' test.txt

Şimdi, test.txt belgemizde satır başına kaç alan olduğunu onaylayabiliriz. Bu dosyanın her satırı 5 alan içerdiğinden, komutun beklendiği gibi çalıştığından eminiz.

22. Geçerli Dosya Adını Doğrulayın


Awk değişkeni FILENAME, geçerli giriş dosya adını doğrulamak için kullanılır. Bunun nasıl çalıştığını basit bir örnekle gösteriyoruz. Ancak, dosya adının açıkça bilinmediği veya birden fazla girdi dosyasının olduğu durumlarda yararlı olabilir.

$ awk '{print FILENAME}' test.txt
$ awk '{print FILENAME}' test.txt new.txt

Yukarıdaki komutlar, girdi dosyalarının yeni bir satırını her işlediğinde awk’nın üzerinde çalıştığı dosya adını yazdırır.

23. İşlenen Kayıtların Sayısını Doğrulayın


Aşağıdaki örnek, awk komutu tarafından işlenen kayıtların sayısını nasıl doğrulayabileceğimizi gösterecektir. Çok sayıda Linux sistem yöneticisi rapor oluşturmak için awk kullandığından, bu onlar için çok yararlıdır.

$ awk '{print "Processing Record - ",NR;} END {print "\nTotal Records Processed:", NR;}' test.txt

Eylemlerime net bir genel bakış elde etmek için sık sık bu awk snippet’ini kullanırım. Yeni fikirlere veya eylemlere uyum sağlamak için kolayca ince ayar yapabilirsiniz.

number of processed lines in awk

24. Bir Kayıttaki Toplam Karakter Sayısını Yazdırın


Awk dili, bize bir kayıtta kaç karakter bulunduğunu söyleyen length() adlı kullanışlı bir işlev sağlar. Birkaç senaryoda çok kullanışlıdır. Bunun nasıl çalıştığını görmek için aşağıdaki örneğe hızlıca göz atın.

$ echo "A random text string..." | awk '{ print length($0); }'
$ awk '{ print length($0); }' /etc/passwd

Yukarıdaki komut, giriş dizesinin veya dosyanın her satırında bulunan toplam karakter sayısını yazdıracaktır.

25. Belirli Bir Uzunluktan Daha Uzun Tüm Satırları Yazdırın


Yukarıdaki komuta bazı koşullar ekleyebilir ve yalnızca önceden tanımlanmış bir uzunluktan daha büyük olan satırları yazdırmasını sağlayabiliriz. Belirli bir kaydın uzunluğu hakkında zaten bir fikriniz olduğunda kullanışlıdır.

$ echo "A random text string..." | awk 'length($0) > 10'
$ awk '{ length($0) > 5; }' /etc/passwd

Komutu gereksinimlerinize göre değiştirmek için daha fazla seçenek ve/veya argüman ekleyebilirsiniz.

26. Satır, Karakter ve Kelime Sayısını Yazdırın


Linux’ta aşağıdaki awk komutu, belirli bir girdideki satır, karakter ve kelime sayısını yazdırır. Bu işlemi yapmak için NR değişkenini ve bazı temel aritmetiği kullanır.

$ echo "This is a input line..." | awk '{ w += NF; c += length + 1 } END { print NR, w, c }'

Giriş dizesinde 1 satır, 5 kelime ve tam olarak 24 karakter bulunduğunu gösterir.

27. Kelimelerin Sıklığını Hesaplayın


Bir belgenin kelime frekansını hesaplamak için ilişkisel dizileri ve for döngüsünü awk’da birleştirebiliriz. Aşağıdaki komut biraz karmaşık görünebilir, ancak temel yapıları net bir şekilde anladıktan sonra oldukça basittir.

$ awk 'BEGIN {FS="[^a-zA-Z]+" } { for (i=1; i<=NF; i++) words[tolower($i)]++ } END { for (i in words) print i, words[i] }' test.txt

Tek satırlık kod parçacığıyla ilgili sorun yaşıyorsanız, aşağıdaki kodu yeni bir dosyaya kopyalayın ve kaynağı kullanarak çalıştırın.

$ cat > frequency.awk
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}

Ardından -f seçeneğini kullanarak çalıştırın.

$ awk -f frequency.awk test.txt

28. Yeniden Adlandırın Dosyaları AWK kullanarak


Awk komutu, belirli kriterlere uyan tüm dosyaları yeniden adlandırmak için kullanılabilir.  Aşağıdaki komut, bir dizindeki tüm .MP3 dosyalarını .mp3 olarak yeniden adlandırmak için awk’nin nasıl kullanılacağını gösterir.

$ touch {a,b,c,d,e}.MP3
$ ls *.MP3 | awk '{ printf("mv \"%s\" \"%s\"\n", $0, tolower($0)) }'
$ ls *.MP3 | awk '{ printf("mv \"%s\" \"%s\"\n", $0, tolower($0)) }' | sh

Öncelikle .MP3 uzantılı bazı demo dosyaları oluşturduk.  İkinci komut, kullanıcıya yeniden adlandırma başarılı olduğunda ne olacağını gösterir.  Son olarak son komut Linux’ta mv komutunu kullanarak yeniden adlandırma işlemini yapar.

29. Bir Sayının Karekökünü Yazdırın


AWK, sayıları değiştirmek için çeşitli yerleşik işlevler sunar.  Bunlardan biri sqrt() fonksiyonudur.  Belirli bir sayının karekökünü döndüren C benzeri bir fonksiyondur.  Bunun genel olarak nasıl çalıştığını görmek için bir sonraki örneğe hızlıca göz atın.

$ awk 'BEGIN{ print sqrt(36); print sqrt(0); print sqrt(-16) }'

Negatif bir sayının karekökünü belirleyemediğiniz için çıktıda sqrt(-12) yerine ‘nan’ adı verilen özel bir anahtar kelime görüntülenecektir.

sqrt function in Linux awk command

30. Bir Sayının Logaritmasını Yazdırın


awk fonksiyonu log() bir sayının doğal logaritmasını sağlar.  Ancak yalnızca pozitif sayılarla çalışacaktır, bu nedenle kullanıcıların girişlerini doğrulamaya dikkat edin.  Aksi takdirde birisi awk programlarınızı kırabilir ve sistem kaynaklarına ayrıcalıksız erişim elde edebilir.

$ awk 'BEGIN{ print log(36); print log(0); print log(-16) }'

36’nın logaritmasını görmeli ve 0’ın logaritmasının sonsuz olduğunu ve negatif bir değerin logunun ‘Sayı Değil’ veya nan olduğunu doğrulamalısınız.

31. Bir Sayının Üstel Değerini Yazdırın


Üstel os a sayısı n, e^n’nin değerini sağlar.  Genellikle büyük rakamlarla veya karmaşık aritmetik mantıkla ilgilenen awk kodlarında kullanılır.  Yerleşik awk fonksiyonunu exp() kullanarak bir sayının üstel değerini üretebiliriz.

$ awk 'BEGIN{ print exp(30); print log(0); print exp(-16) }'

Ancak awk çok büyük sayılar için üstel hesaplama yapamaz.  Bu tür hesaplamaları C gibi düşük seviyeli programlama dillerini kullanarak yapmalı ve değeri awk komut dosyalarınıza beslemelisiniz.

32. AWK Kullanarak Rastgele Sayılar Oluşturun


Rastgele sayılar üretmek için Linux’ta awk komutunu kullanabiliriz.  Bu sayılar 0 ila 1 aralığında olacaktır ancak asla 0 veya 1 olmayacaktır. Daha büyük bir rastgele değer elde etmek için sabit bir değeri elde edilen sayıyla çarpabilirsiniz.

$ awk 'BEGIN{ print rand(); print rand()*99 }'

Rand() fonksiyonunun herhangi bir argümana ihtiyacı yoktur.  Ek olarak, bu fonksiyon tarafından oluşturulan sayılar tam olarak rastgele değil, sözde rastgeledir.  Üstelik bu sayıları koşudan koşuya tahmin etmek oldukça kolaydır.  Bu nedenle hassas hesaplamalar için bunlara güvenmemelisiniz.

33. Color Compiler Warnings in Red


Modern Linux compilers will throw warnings if your code does not maintain language standards or has errors that do not halt program execution. The following awk command will print the warning lines generated by a compiler in red.

$ gcc -Wall main.c |& awk '/: warning:/{print "\x1B[01;31m" $0 "\x1B[m";next;}{print}'

This command is useful if you want to pinpoint compiler warnings specifically. You can use this command with any compiler other than GCC; just make sure to change the pattern /: warning:/ to reflect that particular compiler.

34. Dosya Sisteminin UUID Bilgilerini Yazdırın


UUID veya Evrensel Benzersiz Tanımlayıcı, Linux dosya sistemi gibi kaynakları tanımlamak için kullanılabilecek bir sayıdır.  Aşağıdaki Linux awk komutunu kullanarak dosya sistemimizin UUID bilgilerini kolayca yazdırabiliriz.

$ awk '/UUID/ {print $0}' /etc/fstab

Bu komut, awk kalıplarını kullanarak /etc/fstab dosyasındaki UUID metnini arar.  Dosyadan ilgilenmediğimiz bir yorumu döndürür. Aşağıdaki komut yalnızca UUID ile başlayan satırları almamızı sağlayacaktır.

$ awk '/^UUID/ {print $1}' /etc/fstab

Çıkışı ilk alanla sınırlar.  Yani sadece UUID numaralarını alıyoruz.

35. Linux Çekirdek Görüntüsü Sürümünü Yazdırın


Çeşitli Linux dağıtımları tarafından farklı Linux çekirdek görüntüleri kullanılır.  Sistemimizin temel aldığı çekirdek görüntüsünü awk kullanarak kolayca yazdırabiliriz.  Bunun genel olarak nasıl çalıştığını görmek için aşağıdaki komuta göz atın.

$ uname -a | awk '{print $3}'

İlk önce uname komutunu -a seçeneğiyle yayınladık ve ardından bu verileri awk’ye aktardık.  Daha sonra awk kullanarak çekirdek imajının versiyon bilgisini çıkardık.

36. Satırlardan Önce Satır Numaraları Ekleyin


Kullanıcılar satır numarası içermeyen metin dosyalarıyla oldukça sık karşılaşabilmektedir.  Neyse ki Linux’ta awk komutunu kullanarak bir dosyaya kolayca satır numaraları ekleyebilirsiniz.  Bunun gerçek hayatta nasıl çalıştığını görmek için aşağıdaki örneğe yakından bakın.

$ awk '{ print FNR ". " $0 ;next}{print}' test.txt

Yukarıdaki komut, test.txt referans dosyamızdaki her satırın önüne bir satır numarası ekleyecektir.  Bu sorunu çözmek için yerleşik awk değişkeni FNR’yi kullanır.

add line numbers using awk command

37. İçeriği Sıraladıktan Sonra Bir Dosya Yazdırın


Tüm satırların sıralı bir listesini yazdırmak için awk’yi de kullanabiliriz.  Aşağıdaki komutlar test.txt dosyasındaki tüm ülkelerin adlarını sıralı olarak yazdırır.

$ awk -F ':' '{ print $1 }' test.txt | sort

Bir sonraki komut, /etc/passwd dosyasındaki tüm kullanıcıların oturum açma adını yazdıracaktır.

$ awk -F ':' '{ print $1 }' /etc/passwd | sort

Sıralama komutunu değiştirerek sıralama sırasını kolayca değiştirebilirsiniz.

38. Kılavuz Sayfasını Yazdırın


Kılavuz sayfası, mevcut tüm seçeneklerin yanı sıra awk komutu hakkında ayrıntılı bilgi içerir.  Awk komutuna iyice hakim olmak isteyenler için son derece önemlidir.

$ man awk

Eğer karmaşık awk özelliklerini öğrenmek istiyorsanız bu size çok yardımcı olacaktır.  Bir sorunla karşılaştığınızda bu belgelere başvurun.

39. Yardım Sayfasını Yazdırın


Yardım sayfası tüm olası komut satırı argümanları hakkında özet bilgiler içerir.  Aşağıdaki komutlardan birini kullanarak awk için yardım kılavuzunu çağırabilirsiniz.

$ awk -h
$ awk --help

Awk için mevcut tüm seçeneklere hızlı bir genel bakış istiyorsanız bu sayfaya bakın.

40. Print Version Information


Sürüm bilgisi bize bir programın yapısı hakkında bilgi sağlar.  awk’nin sürüm sayfası telif hakkı, derleme araçları vb. gibi bilgileri içerir.  Bu bilgiyi aşağıdaki awk komutlarından birini kullanarak görüntüleyebilirsiniz.

$ awk -V
$ awk --version

Yazının orijinalini buradan okuyabilirsiniz.