, AWK komutu için güçlü ve çok yönlü bir araçtır metin verilerini işlemek ve dönüştürmek . 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 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 , her satırında aranacak kalıpları dosyanın ve bir kalıp bulunduğunda gerçekleştirilecek eylemleri tanımlayan bir dizi talimattır. Seçenekler, tanır alan ayırıcıyı veya çıktı biçimini seçmek gibi AWK komutunun davranışını değiştirmenize olanak
AWK komutunu kullanarak nasıl metin yazdırabilirim?

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, `BEGIN`dosyayı okumadan önce çalışan `END`adlı bir dosyanız varsa `test.txt` 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
komutu {print} kullanarak belirli bir alanı da yazdırabilirsiniz n, kullanılan seçeneğiyle değiştirebilirsiniz -F.
birinci ve üçüncü alanlarını yazdırmak istiyorsanız /etc/passwdile ayrılmış olan:), 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 ...
dosyasındaki ikinci alanın karesini yazdırmak istiyorsanız test.txt, aşağıdaki komutu kullanabilirsiniz:
awk '{print $2^2}' test.txt
Bu da şu sonucu verir:
16'dır
dosyasındaki satır sayısını yazdırmak istiyorsanız test.txtdeğişkenini kullanabilirsiniz NR. Ö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?

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.
satırları yazdırmak istiyorsanız test.txt kelimesini içeren "Linux", aşağıdaki komutu kullanabilirsiniz:
awk '/Linux/ {print}' test.txt
Bu da şu sonucu verir:
Linux en iyi işletim sistemidir
satırları yazdırmak istiyorsanız /etc/passwd , 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 ! satırları yazdırmak istiyorsanız /etc/passwd dışında olan /usr/sbin/nologin, 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?

AWK komutu, yerleşik fonksiyonlar veya özel değişkenler kullanarak metni değiştirmek için kullanılabilir. Örneğin, test.txtkullanabilirsiniz gsubbir dizenin tüm tekrarlarını başka bir dizeyle değiştiren 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` sırayla değerler alan değişkenin adıdır dizidenve `action` , her yinelemede gerçekleştirilecek eylemdir.
Örneğin, bir dosyanın alanlarını ters sırada yazdırmak istiyorsanız, NFgeçerli satırdaki alan sayısını içeren 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

değişkenini kullanarak bir dosyanın satırları arasında yineleme yapmak için de for döngüsünü kullanabilirsiniz FNRdosyasının çift numaralı satırlarını yazdırmak istiyorsanız test.txt, 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?
uzantılı bir dosyaya yerleştirip .awk komutuyla çalıştırma izni verebilirsiniz chmod +xkomutuyla çalıştırabilirsiniz ./script_name.awk [dosya].
adında ve içinde şu içeriğe sahip bir betiğiniz varsa hello.awk :
#!/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?

AWK betiğine argüman iletmek için iki yöntem kullanabilirsiniz:
- İlk yöntem,
-vformatıyladeğişken=değeradında iki argüman geçirmek istiyorsanızvar1vevar2betiğinizehello.awk, aşağıdaki komutu kullanabilirsiniz:
awk -v var1=hello -v var2=world -f hello.awk
betiğinizde hello.awkdeğişkenlerini kullanarak argümanlara erişebilirsiniz $var1 ve $var2. Ö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
ARGVbetiğinize iki isimsiz argüman iletmek istiyorsanızhello.awk, aşağıdaki komutu kullanabilirsiniz:
awk -f hello.awk hello world
betiğinizde hello.awkindekslerini kullanarak erişebilirsiniz ARGV[1] ve ARGV[2]. Ö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?
seçeneğini -W birlikte lintbetikteki olası hatalar hakkında uyarı mesajları görüntüleyen -W birlikte dump-variables, betiğin yürütülmesinin sonunda değişkenlerin değerlerini görüntüleyen
AWK komutunu kullanarak verileri nasıl sıralayabilirim?
kullanabilirsiniz `sort` dosyasındaki kullanıcıları UID'lerine göre sıralamak istiyorsanız `/etc/passwd` , aşağıdaki komutu kullanabilirsiniz:
awk -F: '{print $1, $3}' /etc/passwd | sort -n -k2
birleştirerek sort komutuyla, 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, NFgeçerli satırdaki alan sayısını içeren NR. Bir for döngüsü kullanarak, her satırdaki kelime sayısını sayabilir ve bunları total. Özel ENDnihai 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?
kullanabilirsiniz -F adlı bir dosyanız varsa test.csv 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?
satırları görüntülemek istiyorsanız test.csv adını içeren "Alice", aşağıdaki kalıbı kullanabilirsiniz:
awk -F"," '/Alice/ {print}' test.csv
Bu da şu sonucu verir:
Alice, Dupont, 25
satırları görüntülemek istiyorsanız test.csv 30 yıldan eski
awk -F"," '$3 > 30 {print}' test.csv
Bu da şu sonucu verir:
Bob, Martin, 32
mantıksal operatörlerini kullanarak birden fazla deseni birleştirebilirsiniz && (ve), || (veya) ve ! satırları görüntülemek istiyorsanız test.csv adı C veya yaşı 10 yaşından küçük
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 ENDdosyasındaki yaşların toplamını ve ortalamasını hesaplamak istiyorsanız test.csv, 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:
- kullanılır
-F",", alan ayırıcıyı virgül olarak tanımlamak için - koşulunu kullanıyoruz
NR>1Sütun adlarını içeren dosyanın ilk satırını yok saymak için - değişkenlerini kullanıyoruz
sumvecountoperatörünü kullanıyoruz+=Üçüncü alanın değeriyle ($3) - deseni nihai sonucu göstermek için kullanılır
ENDkullanılır/ise toplamı sayıya bölerek ortalamayı hesaplamak için
dosyasındaki minimum ve maksimum yaşları hesaplamak istiyorsanız test.csv, 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:
- kullanılır
-F",", alan ayırıcıyı virgül olarak tanımlamak için - koşulunu kullanıyoruz
NR>1Sütun adlarını içeren dosyanın ilk satırını yok saymak için - değişkenlerini kullanıyoruz
minvemax, üçüncü alanın değeriyle ($3boşsa (""operatörlerini kullanıyoruz<ve>Değerleri karşılaştırmak ve gerekirse değişkenleri güncellemek için - 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, Echo komutunu Windows . AWK komutu hakkında daha fazla bilgi edinmek isterseniz, kılavuza veya çevrimiçi olarak bulunan birçok eğitime başvurabilirsiniz.


