Linux altında metin işleme için AWK komutunu nasıl ustaca kullanabilirim?

AWK komutu , metin verilerini işlemek ve dönüştürmek için güçlü ve çok yönlü bir araçtır . Bilgi ayıklamanız, satırları filtrelemeniz, çıktıyı yeniden biçimlendirmeniz veya hesaplamalar yapmanız gerekse de, AWK yalnızca birkaç satır kodla işinizi kolaylaştırabilir. Bu makalede, Linux'ta metin manipülasyonu için AWK komutunu nasıl kullanacağınızı öğreneceksiniz.

AWK komutu nedir?

AWK Programlama Dili.svg

AWK komutu, Linux terminalinde çalışan yorumlayıcı tabanlı bir programlama dilidir. Adı, yaratıcılarının baş harflerinden gelir: Alfred Aho, Peter Weinberger ve Brian Kernighan. AWK başlangıçta CSV dosyaları veya /etc/passwd dosyaları gibi sınırlayıcılarla ayrılmış alanlara sahip dosyaları işlemek için tasarlanmıştır. Bununla birlikte, AWK HTML veya XML dosyaları gibi daha karmaşık metin dosyalarını da işleyebilir. AWK nesne yönelimli bir programlama dili , ancak yerel ve global fonksiyonların ve değişkenlerin tanımlanmasına izin verir. Ayrıca döngüler ve koşullu ifadeler gibi kontrol yapılarına da sahiptir.

AWK komutunun genel sözdizimi aşağıdaki gibidir:

awk [seçenekler] 'program' [dosyalar]

Program , dosyanın her satırında aranacak kalıpları ve bir kalıp bulunduğunda gerçekleştirilecek eylemleri tanımlayan bir dizi talimattır. Seçenekler, alan ayırıcıyı veya çıktı biçimini seçmek gibi AWK komutunun davranışını değiştirmenize olanak tanır

AWK komutunu kullanarak nasıl metin yazdırabilirim?

Linux'ta Awk Komutu Nasıl Kullanılır?

AWK komutu, metindeki bir desene göre terminale bir mesaj yazdırmak için kullanılabilir. AWK komutunu herhangi bir desen belirtmeden, sadece yazdırma komutuyla çalıştırırsanız, Enter tuşuna her bastığınızda AWK mesajı yazdıracaktır.

Örneğin, şunu yazarsanız:

awk '{print "Merhaba"}'

Ve Enter tuşuna birkaç kez basarsanız şunu elde edersiniz:

Merhaba, merhaba, merhaba!

AWK komutunu durdurmak için Ctrl+C tuşlarına basabilirsiniz.

AWK komutunu kullanarak bir dosyanın içeriğini yazdırmak istiyorsanız, dosyayı okumadan önce çalışan `BEGIN` `END` `test.txt` adlı bir dosyanız varsa ve içeriği şu şekildeyse:

Bu bir test. AWK harika bir araç. Linux en iyi işletim sistemi

Dosyanın içeriğini aşağıdaki komutla yazdırabilirsiniz:

awk 'BEGIN {print "test.txt dosyasının içeriği burada:"} {print} END {print "Dosya sonu"}' test.txt

Bu da şu sonucu verir:

İşte test.txt dosyasının içeriği: Bu bir test. AWK harika bir araç. Linux en iyi işletim sistemi. Dosya sonu

{print} komutu , n $n değişkeniyle belirli bir alanı da yazdırabilirsiniz -F seçeneğiyle değiştirebilirsiniz .

/etc/passwd :) ile ayrılmış olan birinci ve üçüncü alanlarını yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk -F: '{print $1 " " $3}' /etc/passwd

Bu da şöyle bir sonuç verir:

root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 news 9 uucp 10 proxy 13 www-data 33 ...

test.txt dosyasındaki ikinci alanın karesini yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk '{print $2^2}' test.txt

Bu da şu sonucu verir:

16'dır

test.txt dosyasındaki satır sayısını yazdırmak istiyorsanız NR değişkenini kullanabilirsiniz . Örneğin, aşağıdaki komutu kullanabilirsiniz:

awk 'END {print NR}' test.txt

Bu da şu sonucu verir:

3

AWK komutu kullanarak metin nasıl filtrelenir?

dl.beatsnoop.com thumb 1687289446

AWK komutu, kalıplara veya koşullara göre metni filtrelemek için kullanılabilir. Bir işlemden önce bir kalıp belirtirseniz, AWK işlemi yalnızca kalıp satırda bulunduğunda gerçekleştirir. Kalıp, normal bir ifade, bir karşılaştırma, mantıksal bir işlem veya bunların bir kombinasyonu olabilir.

test.txt "Linux" kelimesini içeren satırları yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk '/Linux/ {print}' test.txt

Bu da şu sonucu verir:

Linux en iyi işletim sistemidir

/etc/passwd satırları yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk -F: '$3 > 1000 {print}' /etc/passwd

Bu da şöyle bir sonuç verir:

systemd-coredump:x:997:997:systemd Çekirdek Döküm Aracı:/:/usr/sbin/nologin tss:x:131:142:TPM yazılım yığını,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

mantıksal operatörler && (ve), || (veya) ve ! /etc/passwd /usr/sbin/nologin dışında olan satırları yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {print}' /etc/passwd

Kopyala

Bu da şöyle bir sonuç verir:

tss:x:131:142:TPM yazılım yığını,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

AWK komutunu kullanarak metin nasıl düzenlenir?

dl.beatsnoop.com thumb 1687289615

AWK komutu, yerleşik fonksiyonlar veya özel değişkenler kullanarak metni değiştirmek için kullanılabilir. Örneğin, test.txt bir dizenin tüm tekrarlarını başka bir dizeyle değiştiren gsub kullanabilirsiniz OFS . Örneğin, aşağıdaki komutu kullanabilirsiniz:

awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt

Bu da şu sonucu verir:

30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51

Diğer kullanılabilir fonksiyonlar ve değişkenler hakkında bilgi edinmek için AWK komut kılavuzuna başvurabilirsiniz.

AWK komutuyla for döngüsü nasıl kullanılır?

AWK komutu, bir dosyanın alanları veya satırları üzerinde for döngüleri gerçekleştirmek için kullanılabilir. For döngüsünün sözdizimi şu şekildedir:

(Dizideki değişken) için eylem

Burada `variable` diziden sırayla değerler alan değişkenin adıdır ve `action` , her yinelemede gerçekleştirilecek eylemdir.

Örneğin, bir dosyanın alanlarını ters sırada yazdırmak istiyorsanız, geçerli satırdaki alan sayısını içeren NF test.txt adlı ve bu dosya şunları içeriyorsa:

Bu bir test. AWK harika bir araç. Linux en iyi işletim sistemi

Aşağıdaki komutla alanların sırasını tersine çevirebilirsiniz:

awk '{for (i=NF; i>0; i--) print $i}' test.txt

Bu da şu sonucu verir:

Bir test aracı bu müthiş araçtır; bir diğeri AWK'dır; en iyi işletim sistemi ise Linux'tur
dl.beatsnoop.com thumb 1687289757

FNR değişkenini kullanarak bir dosyanın satırları arasında yineleme yapmak için de for döngüsünü kullanabilirsiniz test.txt dosyasının çift numaralı satırlarını yazdırmak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk 'FNR%2==0 {print FNR}' test.txt

Bu da şu sonucu verir:

2
4

AWK betiğini nasıl çalıştırırım?

.awk uzantılı bir dosyaya yerleştirip chmod +x komutuyla çalıştırma izni verebilirsiniz ./script_name.awk [dosya] komutuyla çalıştırabilirsiniz .

hello.awk adında ve içinde şu içeriğe sahip bir betiğiniz varsa :

#!/usr/bin/awk -f BEGIN {print "Merhaba"}

Aşağıdaki komutla betiği çalıştırabilirsiniz:

./hello.awk

Bu da şu sonucu verir:

Günaydın

AWK betiğine nasıl argüman gönderirim?

dl.beatsnoop.com thumb 1687289922

AWK betiğine argüman iletmek için iki yöntem kullanabilirsiniz:

  • İlk yöntem, değişken=değer formatıyla -v hello.awk betiğinize var1 ve var2 adında iki argüman geçirmek istiyorsanız , aşağıdaki komutu kullanabilirsiniz:
awk -v var1=hello -v var2=world -f hello.awk 

hello.awk betiğinizde $var1 ve $var2 değişkenlerini kullanarak argümanlara erişebilirsiniz . Örneğin, betiğiniz şunları içeriyorsa:

#!/usr/bin/awk -f BEGIN {print $var1 " " $var2}

Şunları elde edersiniz:

Selam Dünya
  • İkinci yöntem, betiğe iletilen argümanları içeren özel ARGV hello.awk betiğinize iki isimsiz argüman iletmek istiyorsanız , aşağıdaki komutu kullanabilirsiniz:
awk -f hello.awk hello world 

hello.awk betiğinizde ARGV[1] ve ARGV[2] indekslerini kullanarak erişebilirsiniz . Örneğin, betiğiniz şunları içeriyorsa:

#!/usr/bin/awk -f BEGIN {ARGV[1] yazdır " " ARGV[2]}

Şunları elde edersiniz:

Selam Dünya

SSS

AWK ve GAWK arasındaki fark nedir?

GAWK, AWK'nın GNU tarafından geliştirilmiş bir uygulamasıdır ve orijinal dile genişletilmiş düzenli ifadeler, çok boyutlu diziler veya önceden tanımlanmış fonksiyonlar gibi ek özellikler ekler.

AWK betiğinde nasıl hata ayıklama yaparım?

betikteki olası hatalar hakkında uyarı mesajları görüntüleyen lint birlikte -W seçeneğini , betiğin yürütülmesinin sonunda değişkenlerin değerlerini görüntüleyen dump-variables birlikte -W

AWK komutunu kullanarak verileri nasıl sıralayabilirim?

`sort` kullanabilirsiniz `/etc/passwd` dosyasındaki kullanıcıları UID'lerine göre sıralamak istiyorsanız , aşağıdaki komutu kullanabilirsiniz:

awk -F: '{print $1, $3}' /etc/passwd | sort -n -k2

sort komutuyla birleştirerek , verileri görüntüleme ve düzenleme konusunda çok daha ileri gidebilirsiniz.

AWK komutunu kullanarak bir dosyadaki kelime sayısını nasıl yazdırabilirim?

AWK komutunu kullanarak bir dosyadaki kelime sayısını yazdırmak için, geçerli satırdaki alan sayısını içeren NF NR . Bir for döngüsü kullanarak, her satırdaki kelime sayısını sayabilir ve bunları total . Özel END nihai sonucu yazdırabilirsiniz. Örneğin, test.txt ve şu içeriğe sahipse:

Bu bir test. AWK harika bir araç. Linux en iyi işletim sistemi

Dosyadaki kelime sayısını aşağıdaki komutla yazdırabilirsiniz:

awk '{for (i=1; i<=NF; i++) total++} END {print total}' test.txt

Bu da şu sonucu verir:

9

AWK komutunu kullanarak CSV dosyasından veri nasıl çıkarabilirim?

-F kullanabilirsiniz test.csv adlı bir dosyanız varsa ve bu dosya şunları içeriyorsa:

İsim, soyad, yaş: Alice Dupont, 25; Bob Martin, 32; Charles Durand, 28

Aşağıdaki komutu kullanarak kişilerin adını ve yaşını çıkarabilirsiniz:

awk -F"," '{print $1 " " $3}' test.csv

Bu da şu sonucu verir:

İsim, yaş: Alice 25, Bob 32, Charles 28

AWK komutu kullanılarak veriler nasıl filtrelenir?

test.csv "Alice" adını içeren satırları görüntülemek istiyorsanız , aşağıdaki kalıbı kullanabilirsiniz:

awk -F"," '/Alice/ {print}' test.csv

Bu da şu sonucu verir:

Alice, Dupont, 25

test.csv 30 yıldan eski satırları görüntülemek istiyorsanız

awk -F"," '$3 > 30 {print}' test.csv

Bu da şu sonucu verir:

Bob, Martin, 32

&& (ve), || (veya) ve ! mantıksal operatörlerini kullanarak birden fazla deseni birleştirebilirsiniz test.csv adı C veya yaşı 10 yaşından küçük satırları görüntülemek istiyorsanız

awk -F"," '($1 ~ /^C/) || ($3 < 10) {print}' test.csv

Bu da şu sonucu verir:

CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7

AWK komutu kullanılarak istatistikler nasıl hesaplanır?

AWK komutu, bir dosyadaki sayısal veriler üzerinde toplam, ortalama, minimum veya maksimum gibi istatistikler hesaplamanıza olanak tanır. Bunu yapmak için, ara değerleri saklamak üzere değişkenler kullanmanız ve her satırda bunları güncellemeniz yeterlidir. Özel END test.csv dosyasındaki yaşların toplamını ve ortalamasını hesaplamak istiyorsanız , aşağıdaki programı kullanabilirsiniz:

awk -F"," 'NR>1 {sum+=$3; count++} END {print "Toplam: " sum; print 'Ortalama: 'sum/count}' test.csv

Bu da şu sonucu verir:

Toplam: 110 Ortalama: 18.3333

Açıklama:

  • -F"," , alan ayırıcıyı virgül olarak tanımlamak için kullanılır
  • Sütun adlarını içeren dosyanın ilk satırını yok saymak için NR>1 koşulunu kullanıyoruz
  • sum ve count değişkenlerini kullanıyoruz Üçüncü alanın değeriyle ( 3 ) += operatörünü kullanıyoruz
  • END deseni nihai sonucu göstermek için kullanılır / ise toplamı sayıya bölerek ortalamayı hesaplamak için kullanılır

test.csv dosyasındaki minimum ve maksimum yaşları hesaplamak istiyorsanız , aşağıdaki programı kullanabilirsiniz:

awk -F"," 'NR>1 {if (min=="") min=max=$3; if ($3<min) min=$3; if ($3> max) max=$3} END {print "Min: " min; print 'Max: 'max}' test.csv

Bu da şu sonucu verir:

Minimum: 6 Maksimum: 32

Açıklama:

  • -F"," , alan ayırıcıyı virgül olarak tanımlamak için kullanılır
  • Sütun adlarını içeren dosyanın ilk satırını yok saymak için NR>1 koşulunu kullanıyoruz
  • min ve max değişkenlerini kullanıyoruz boşsa ( "" , üçüncü alanın değeriyle ( $3 Değerleri karşılaştırmak ve gerekirse değişkenleri güncellemek için < ve > operatörlerini kullanıyoruz
  • END , nihai sonucu görüntülemek için kullanılır.

Çözüm

AWK komutu, Linux'ta metin işleme için temel bir araçtır. Veri ayıklama, filtreleme, değiştirme veya hesaplama gibi karmaşık görevleri yalnızca birkaç satır kodla gerçekleştirmenizi sağlar. Desenleri, eylemleri, fonksiyonları ve değişkenleri sayesinde büyük bir esneklik sunar. Yeteneklerini genişletmek için diğer Linux komutlarıyla birleştirilebilir. Örneğin, Windows Echo komutunu . AWK komutu hakkında daha fazla bilgi edinmek isterseniz, kılavuza veya çevrimiçi olarak bulunan birçok eğitime başvurabilirsiniz.

Önceki makale: Windows Server'da FTPS ile dosya transferlerinizi nasıl güvenli hale getirebilirsiniz ?
Sonraki makale: YouTube Premium'u ücretsiz nasıl edinebilirsiniz?
Merhaba, ben François :) Boş zamanlarımda teknolojiye olan tutkumu paylaşmayı seven bir yazarım! 😍 Donanım, yazılım, video oyunları, sosyal medya veya daha birçok alanda aradığınız her şeyi bu sitede bulabilirsiniz. Çeşitli platformlardaki analizlerimi, incelemelerimi, eğitimlerimi ve favori keşiflerimi paylaşıyorum. Sadece trendleri takip etmekle kalmayıp, sizi en iyi çözümlere yönlendirmeye çalışan, bilgili ve seçici bir teknoloji meraklısıyım. Bu yüzden takipte kalın!