Linux altında metinleri işlemek için AWK komutunda nasıl ustalaşılır?

AWK komutu Linux'ta metin verilerini işlemek ve dönüştürmek için güçlü ve çok yönlü bir araçtır Bilgi çıkarmak, satırları filtrelemek, çıktıyı yeniden biçimlendirmek veya hesaplamalar yapmak olsun, AWK yalnızca birkaç satır kodla hayatınızı kolaylaştırabilir. Bu makalede, Linux'ta metin işleme için AWK komutunun nasıl kullanılacağını öğreneceksiniz.

AWK komutu nedir?

AWK Programlama Dili.svg

AWK komutu, Linux terminalinde çalışan yorumlanmış bir programlama dilidir. Adı, yaratıcılarının baş harflerinden geliyor: 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 yapılandırılmış dosyaları işlemek için tasarlandı. Ancak AWK, HTML veya XML dosyaları gibi daha karmaşık metin dosyalarını da işleyebilir. nesne yönelimli bir programlama dili değildir ancak yerel veya global fonksiyon ve değişkenleri tanımlamanıza olanak tanır. Ayrıca döngüler ve koşullar gibi kontrol yapılarına da sahiptir.

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

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

Program, dosya ( ın her satırında aranacak modelleri ve bir model bulunduğunda gerçekleştirilecek eylemleri tanımlayan bir dizi talimattan oluşur. Seçenekler , alan sınırlayıcı seçimi veya çıktı formatı gibi AWK komutunun davranışını değiştirmenize olanak tanır.

AWK komutuyla metin nasıl yazdırılır?

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

AWK komutu, metindeki bir desene dayalı olarak terminale bir mesaj yazdırmak için kullanılabilir. AWK komutunu herhangi bir sebep olmadan ve yalnızca yazdırma komutunu çalıştırırsanız, Enter tuşuna her bastığınızda AWK mesajı yazdırır.

Örneğin şunu yazarsanız:

awk '{print "Merhaba"}'

Birkaç kez Enter tuşuna basarsanız şunları elde edersiniz:

Günaydın, günaydın, günaydın

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

AWK komutu ile bir dosyanın içeriğini yazdırmak istiyorsanız, dosyayı okumadan önce çalışan BEGIN dosyayı okuduktan sonra çalışan END test.txt adında bir dosyanız varsa :

Bu bir testtir AWK harika bir araçtır Linux en iyi işletim sistemidir

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

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

Hangisi verir:

Test.txt dosyasının içeriği şöyledir: Bu bir testtir AWK harika bir araçtır Linux en iyi işletim sistemidir Dosya sonu

{print} komutu satırın tamamını yazdırır. $n kullanarak da belirli bir alanı yazdırabilirsiniz ; burada n , alan numarasıdır. -F seçeneğiyle değiştirebilirsiniz .

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

awk -F: '{$1 yazdır " " $3}' /etc/passwd

Hangi gibi bir şey verir:

root 0 arka plan programı 1 bin 2 sys 3 senkronizasyon 4 oyunlar 5 adam 6 lp 7 posta 8 haber 9 uucp 10 proxy 13 www-data 33 ...

AWK komutuyla aritmetik ifadeleri veya karakter dizilerini de yazdırabilirsiniz. test.txt dosyasının ikinci alanının karesini yazdırmak istiyorsanız aşağıdaki komutu kullanabilirsiniz:

awk '{$2^2 yazdır}' test.txt

Hangisi verir:

16 mı

Test.txt dosyasındaki satır sayısını yazdırmak istiyorsanız geçerli satırın numarasını içeren NR özel değişkenini kullanabilirsiniz Örneğin aşağıdaki komutu kullanabilirsiniz:

awk 'END {NR'yi yazdır}' test.txt

Hangisi verir:

3

AWK komutuyla metin nasıl filtrelenir?

dl.beatsnoop.com başparmak 1687289446

AWK komutu, metni kalıplara veya koşullara göre filtrelemek için kullanılabilir. Bir eylemden önce bir desen belirtirseniz AWK, yalnızca desenin satırda bulunması durumunda eylemi gerçekleştirir. Desen düzenli 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

Hangisi verir:

Linux en iyi işletim sistemidir

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

awk -F: '$3 > 1000 {yazdır}' /etc/passwd

Hangi gibi bir şey verir:

systemd-coredump:x:997:997:systemd Çekirdek Damper:/:/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 durumu: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 ...

&& (ve), || mantıksal operatörlerini de kullanabilirsiniz. (veya ve ! (hayır) desenleri birleştirmek için. /etc/passwd /usr/sbin/nologin dışında bir kabuğa sahip satırları yazdırmak istiyorsanız aşağıdaki komutu kullanabilirsiniz:

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

Kopyalamak

Hangi gibi bir şey 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 durumu: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::/varolmayan:/bin/false ...

AWK komutuyla metin nasıl düzenlenir?

dl.beatsnoop.com başparmak 1687289615

AWK komutu, yerleşik işlevleri veya özel değişkenleri kullanarak metni değiştirmek için kullanılabilir. test.txt dosyasındaki boşlukları tirelerle değiştirmek istiyorsanız bir dizenin tüm oluşumlarını bir başkasıyla değiştiren gsub kullanabilirsiniz Çıkış alanı ayırıcısını tanımlayan OFS de kullanabilirsiniz Örneğin aşağıdaki komutu kullanabilirsiniz:

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

Hangisi verir:

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

Mevcut diğer işlevler ve değişkenler için AWK komut kılavuzuna başvurabilirsiniz.

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

AWK komutu, bir dosyadaki alanlar veya satırlar üzerinde döngüler gerçekleştirmek için kullanılabilir. For döngüsünün sözdizimi aşağıdaki gibidir:

for (dizideki değişken) eylemi

Burada değişken diziden değerleri art arda alan değişkenin adıdır ve eylem , her yinelemede gerçekleştirilecek eylemdir.

geçerli satırdaki alanların sayısını içeren NF özel değişkeniyle birlikte kullanabilirsiniz aşağıdakileri içeren test.txt varsa

Bu bir testtir AWK harika bir araçtır Linux en iyi işletim sistemidir

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

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

Hangisi verir:

birincisi test Bu harika araç, biri AWK işletim sistemi, en iyisi Linux
dl.beatsnoop.com başparmak 1687289757

Geçerli dosyayla ilgili satır numarasını içeren FNR sahip bir dosyanın satırları arasında yineleme yapmak için for döngüsünü de kullanabilirsiniz test.txt dosyasının çift satır numaralarını yazdırmak istiyorsanız aşağıdaki komutu kullanabilirsiniz:

awk 'FNR%2==0 {FNR'yi yazdır}' test.txt

Hangisi verir:

2
4

Bir AWK betiği nasıl çalıştırılır?

.awk uzantılı bir dosyaya yerleştirebilir chmod +x komutuyla yürütme haklarını verebilirsiniz . ./script_name.awk [files] komutuyla çalıştırabilirsiniz .

hello.awk aşağıdakileri içeren bir komut dosyanız varsa

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

Komut dosyasını aşağıdaki komutla çalıştırabilirsiniz:

./merhaba.awk

Hangisi verir:

Günaydın

Bir AWK betiğine argümanlar nasıl aktarılır?

dl.beatsnoop.com başparmak 1687289922

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

  • -v değişken=değer biçimiyle kullanmaktır . hello.awk betiğinize var1 ve var2 adlı iki bağımsız değişkeni iletmek istiyorsanız aşağıdaki komutu kullanabilirsiniz:
awk -v var1=merhaba -v var2=dünya -f merhaba.awk 

hello.awk betiğinizde $var1 ve $var2 değişkenlerine sahip argümanlara erişebilirsiniz . Örneğin, komut dosyanız şunları içeriyorsa:

#!/usr/bin/awk -f BEGIN {yazdır $var1 " " $var2}

Şunu elde edersiniz:

İyi günler Monde
  • betiğe aktarılan argümanları içeren ARGV kullanmaktır hello.awk betiğinize iki isimsiz argüman iletmek istiyorsanız aşağıdaki komutu kullanabilirsiniz:
awk -f merhaba.awk merhaba dünya 

hello.awk betiğinizde ARGV[1] ve ARGV[2] indeksleriyle . Örneğin, komut dosyanız şunları içeriyorsa:

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

Şunu elde edersiniz:

İyi günler Monde

SSS

AWK ve GAWK arasındaki fark nedir?

GAWK, orijinal dile genişletilmiş düzenli ifadeler, çok boyutlu diziler veya önceden tanımlanmış işlevler için destek gibi ek özellikler ekleyen, AWK'nın bir GNU uygulamasıdır.

Bir AWK betiğinde hata ayıklama nasıl yapılır?

-W , betikteki olası hatalar hakkında uyarı mesajları görüntüleyen lint parametresiyle kullanabilirsiniz Komut dosyasının yürütülmesinin sonunda değişken değerlerini görüntüleyen dump-variables parametresiyle -W de kullanabilirsiniz

Verileri sıralamak için AWK komutu nasıl kullanılır?

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

awk -F: '{$1, $3 yazdır}' /etc/passwd | sırala -n -k2 

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

AWK komutuyla bir dosyanın kelime sayısı nasıl yazdırılır?

geçerli satırdaki alan sayısını içeren NF geçerli satırın numarasını içeren NR kullanabilirsiniz Bir for döngüsü kullanarak her satırdaki kelime sayısını sayabilir ve bunları toplam . Özel desen END'i nihai sonucu yazdırabilirsiniz. test.txt adında bir dosyanız varsa :

Bu bir testtir AWK harika bir araçtır Linux en iyi işletim sistemidir

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

awk '{for (i=1; i<=NF; i++) total++} END {toplamı yazdır}' test.txt

Hangisi verir:

9

Bir CSV dosyasından veri çıkarmak için AWK komutu nasıl kullanılır?

Virgülle ayrılmış değerler (CSV) dosyasından veri çıkarmak amacıyla AWK komutunu kullanmak için, alan ayırıcıyı virgül olarak ayarlamak üzere -F aşağıdakileri içeren test.csv adında bir dosyanız varsa

isim, isim, yaş Alice, Dupont, 25 Bob, Martin, 32 Charles, Durand, 28

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

awk -F"," '{$1 yazdır " " $3}' test.csv

Hangisi verir:

isim yaşı Alice 25 Bob 32 Charles 28

AWK komutuyla veriler nasıl filtrelenir?

AWK komutu, verileri düzenli ifadeler veya mantıksal koşullar olan kalıplara göre filtrelemenize olanak tanır. Desenler, süslü parantezlerle ayrılmış olarak eylemlerden önce yerleştirilir. test.csv Alice adını içeren satırları görüntülemek istiyorsanız aşağıdaki modeli kullanabilirsiniz:

awk -F"," '/Alice/ {yazdır}' test.csv

Hangisi verir:

Alice,Dupont,25

Test.csv satırları görüntülemek istiyorsanız aşağıdaki modeli kullanabilirsiniz:

awk -F"," '$3 > 30 {yazdır}' test.csv

Hangisi verir:

Bob,Martin,32

&& (ve), || mantıksal işleçleriyle birleştirebilirsiniz. (veya ve ! (HAYIR). test.csv C ile başlayan veya 10 yaşından küçük olan satırları görüntülemek istiyorsanız

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

Hangisi verir:

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

AWK komutuyla istatistik nasıl hesaplanır?

AWK komutu, bir dosyadaki toplam, ortalama, minimum veya maksimum gibi sayısal verilere ilişkin istatistikleri hesaplamanıza olanak tanır. Bunu yapmak için, ara değerleri depolamak ve bunları her satırda güncellemek için değişkenleri kullanmanız yeterlidir. Özel END nihai sonucu görüntüleyebiliriz. test.csv dosyasındaki yaşların toplamını ve ortalamasını hesaplamak istiyorsanız aşağıdaki programı kullanabilirsiniz:

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

Hangisi verir:

Toplam: 110 Ortalama: 18.3333

Açıklamalar:

  • Alan ayırıcısını virgül olarak tanımlamak için -F,” kullanıyoruz
  • Sütun adlarını içeren dosyanın ilk satırını yok saymak için NR>1 koşulunu kullanırız
  • Yaşların toplamını ve sayısını toplamak için toplam ve sayım kullanırız Değişkenleri üçüncü alanın değeriyle ( $3 += kullanırız .
  • Nihai sonucu görüntülemek için END kullanırız Toplamı sayıya bölerek ortalamayı hesaplamak için / kullanırız

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

awk -F"," 'NR>1 {if (min=="") min=max=$3; eğer (3$ max) max=$3} END {print "Min: " min; print 'Maks: 'maks}' test.csv 

Hangisi verir:

Min: 6 Maksimum: 32

Açıklamalar:

  • Alan ayırıcısını virgül olarak tanımlamak için -F,” kullanıyoruz
  • Sütun adlarını içeren dosyanın ilk satırını yok saymak için NR>1 koşulunu kullanırız
  • Minimum ve maksimum yaşları saklamak için min ve max kullanırız boş olmaları durumunda ( "" üçüncü alanın değeriyle ( $3 . Değerleri karşılaştırmak ve gerekirse değişkenleri güncellemek için < ve > kullanırız
  • Nihai sonucu görüntülemek için END kullanırız

Çözüm

AWK komutu, Linux altında metinleri değiştirmek için önemli bir araçtır. Verileri ayıklamak, filtrelemek, değiştirmek veya hesaplamak gibi karmaşık görevleri birkaç satır kodla gerçekleştirmenize olanak tanır. Kalıpları, eylemleri, işlevleri ve değişkenleri sayesinde büyük esneklik sunar. Olanaklarını genişletmek için diğer Linux komutlarıyla birleştirilebilir. ekranda bir mesajı veya değişkeni görüntülemek için Windows Echo komutunu kullanabilirsiniz AWK komutu hakkında daha fazla bilgi edinmek istiyorsanız kılavuza veya internette bulunan birçok eğitime başvurabilirsiniz.

Önceki makale Windows Server'da dosya aktarımlarınızı FTPS ile nasıl güvence altına alabilirsiniz ?
Sonraki makale Ücretsiz YouTube Premium nasıl edinilir?
Merhaba ben François :) Boş zamanlarımda tutkusunu paylaşmayı seven editör: TT High tech! 😍 İster donanım olsun, ister yazılım, video oyunları, sosyal medya ve daha birçok alanda sitede. Analizlerimi, testlerimi, eğitimlerimi ve favorilerimi çeşitli mecralarda sizlerle paylaşıyorum. Sadece modayı takip etmeyen, aynı zamanda sizi en iyi çözümlere yönlendirmeyi amaçlayan, bilgili ve talepkar bir teknoloji tutkunuyum. O halde bizi izlemeye devam edin!