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 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?
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?
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?
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
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?
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ğinizevar1
vevar2
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ırhello.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
vesayı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
vemax
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.