- Dosyaları satır satır tarayın.
- Her satırı alanlara/sütunlara bölün.
- Kalıpları belirtin ve dosyanın satırlarını bu kalıplarla karşılaştırın
- Belirli bir desenle eşleşen çizgiler üzerinde çeşitli eylemler gerçekleştirin
Bu yazıda, awk komutunun temel kullanımını ve bir dizi dosyasını bölmek için nasıl kullanılabileceğini açıklayacağız. Bu makaledeki örnekleri bir Debian 10 Buster sisteminde gerçekleştirdik, ancak çoğu Linux dağıtımında kolayca çoğaltılabilirler.
Kullanacağımız örnek dosya
awk komutunun kullanımını göstermek için kullanacağımız stringlerin örnek dosyası aşağıdaki gibidir:
Örnek dosyanın her bir sütunu şunu gösterir:
- İlk sütun, bir okuldaki çalışanların/öğretmenlerin adını içerir
- İkinci sütun, çalışanın öğrettiği konuyu içerir
- Üçüncü sütun, çalışanın profesör mü yoksa yardımcı doçent mi olduğunu gösterir
- Dördüncü sütun, çalışanın ücretini içerir
Örnek 1: Bir dosyanın tüm satırlarını yazdırmak için Awk kullanın
Belirtilen bir dosyanın her satırını yazdırmak, awk komutunun varsayılan davranışıdır. awk komutunun aşağıdaki sözdiziminde, awk'nin yazdırması gereken herhangi bir kalıp belirtmiyoruz, bu nedenle komutun "yazdır" eylemini dosyanın tüm satırlarına uygulaması gerekiyor.
Sözdizimi:
$ awk 'print' dosya adı.TxtMisal:
Bu örnekte, awk komutuna örnek dosyamın içeriğini satır satır yazdırmasını söylüyorum.
$ awk 'print' örnek_dosyası.Txt
Örnek 2: Yalnızca belirli bir kalıpla eşleşen satırları yazdırmak için awk kullanın
awk ile bir kalıp belirtebilirsiniz ve komut sadece o kalıpla eşleşen satırları yazdıracaktır.
Sözdizimi:
$ awk '/pattern_to_be_matched/ print' dosya adı.TxtMisal:
Örnek dosyadan sadece 'B' değişkenini içeren satır(lar)ı yazdırmak istersem aşağıdaki komutu kullanabilirim:
$ awk '/B/ print' örnek_dosyası.Txt
Örneği daha anlamlı kılmak için, sadece 'profesör' olan çalışanlar hakkındaki bilgileri yazdırmama izin verin.
$ awk '/profesör/ baskı' örnek_dosyası.Txt
Komut yalnızca “profesör” dizesini içeren satırları/girişleri yazdırır, böylece verilerden elde edilen daha değerli bilgilere sahip oluruz.
Örnek 3. Yalnızca belirli alanlar/sütunlar yazdırılacak şekilde dosyayı bölmek için awk kullanın
Tüm dosyayı yazdırmak yerine, dosyanın yalnızca belirli sütunlarını yazdırmak için awk yapabilirsiniz. Awk, bir satırdaki beyaz boşlukla ayrılmış tüm sözcükleri varsayılan olarak bir sütun kaydı olarak ele alır. Kaydı $N değişkeninde saklar. $1 ilk kelimeyi temsil ederken, $2 ikinci kelimeyi, $3 dördüncü kelimeyi depolar ve bu böyle devam eder. $0 tüm satırı saklar, böylece örnek 1'de açıklandığı gibi who satırı yazdırılır.
Sözdizimi:
$ awk 'yazdır $N,… .' dosya adı.TxtMisal:
Aşağıdaki komut, örnek dosyamın yalnızca ilk sütununu(ad) ve ikinci sütununu(konu) yazdıracaktır:
$ awk 'print $1, $2' sample_file.Txt
Örnek 4: Bir desenin eşleştirildiği satır sayısını saymak ve yazdırmak için Awk kullanın
Awk'ye belirtilen bir kalıbın eşleştiği satır sayısını saymasını ve ardından 'sayım' çıktısını vermesini söyleyebilirsiniz.
Sözdizimi:
$ awk '/pattern_to_be_matched/++cnt END print "Count = ", cnt'dosya adı.Txt
Misal:
Bu örnekte, “ingilizce” konusunu öğreten kişilerin sayısını saymak istiyorum. Bu yüzden awk komutuna “english” kalıbıyla eşleşmesini söyleyeceğim ve bu kalıbın eşleştiği satır sayısını yazdıracağım.
$ awk '/english/++cnt END print "Count = ", cnt' sample_file.Txt
Buradaki sayı örnek dosya kayıtlarından 2 kişinin ingilizce öğrettiğini gösteriyor.
Örnek 5: Yalnızca belirli sayıda karakterden fazla olan satırları yazdırmak için awk kullanın
Bu görev için, "uzunluk" adı verilen yerleşik awk işlevini kullanacağız. Bu işlev, giriş dizesinin uzunluğunu döndürür. Bu nedenle, awk'nin yalnızca karakter sayısından daha fazla veya hatta daha az olan satırları yazdırmasını istiyorsak, uzunluk işlevini aşağıdaki şekilde kullanabiliriz:
Sayıdan büyük karakterler içeren satırları yazdırmak için:
$ awk 'uzunluk($0) > n' dosya adı.TxtBir sayıdan daha az karakter içeren satırları yazdırmak için:
$ awk 'uzunluk($0) < n' filename.txtn, bir satır için belirtmek istediğiniz karakter sayısıdır.
Misal:
Aşağıdaki komut, yalnızca 30'dan fazla karakter içeren örnek dosyamdaki satırları yazdıracaktır:
$ awk 'uzunluk($0) > 30' sample_file.Txt
Örnek 6: Komut çıktısını başka bir dosyaya kaydetmek için awk kullanın
Yeniden yönlendirme operatörünü '>' kullanarak, çıktısını başka bir dosyaya yazdırmak için awk komutunu kullanabilirsiniz. Bunu şu şekilde kullanabilirsiniz:
$ awk 'criteria_to_print" dosya adı.txt > çıktı dosyası.TxtMisal:
Bu örnekte, yalnızca çalışanların adlarını (sütun 1) yeni bir dosyaya yazdırmak için awk komutumla yeniden yönlendirme operatörünü kullanacağım:
$ awk 'print $1' sample_file.txt > çalışan_adı.Txt
Yeni dosyanın yalnızca çalışanların adlarını içerdiğini cat komutlarıyla doğruladım.
Örnek 7: Bir dosyadan yalnızca boş olmayan satırları yazdırmak için awk kullanın
Awk, çıktıyı filtrelemek için kullanabileceğiniz bazı yerleşik komutlara sahiptir. Örneğin, NF komutu, geçerli giriş kaydındaki alanların sayısını tutmak için kullanılır. Burada, dosyanın yalnızca boş olmayan satırlarını yazdırmak için NF komutunu kullanacağız:
$ awk 'NF > 0' örnek_dosyası.TxtAçıkçası, boş satırları yazdırmak için aşağıdaki komutu kullanabilirsiniz:
$ awk 'NF < 0' sample_file.txtÖrnek 8: Bir dosyadaki toplam satırları saymak için awk kullanın
NR adlı başka bir yerleşik işlev, belirli bir dosyanın giriş kayıtlarının (genellikle satırların) sayısını tutar. Bir dosyadaki satır sayısını saymak için awk'da bu işlevi aşağıdaki gibi kullanabilirsiniz:
$ awk 'END print NR ' sample_file.Txt
Bu, awk komutuyla dosyaları bölmeye başlamak için ihtiyacınız olan temel bilgilerdi. awk aracılığıyla dize dosyanızdan daha anlamlı bilgiler almak için bu örneklerin birleşimini kullanabilirsiniz.