Linux AWK

Linux tabanlı işletim sistemlerinde dosya içinde arama yapmak, listelemek ve içeriği uygun biçimde yazdırmak için kullanılan awk komutu ile ilgili bilgiler yer alıyor.

Linux’ta her şey bir dosya olduğundan dosya içindeki ayarların bulunması, listelenmesi zaman alabilir.

Bu durumda dosya içindeki istenilen değeri almak, listelemek için geniş bir kullanımı olan awk komutunu kullanmak faydalı olacaktır.

awk kullanımı

Aracın temel kullanımı aşağıdaki gibidir.

awk komutlar dosya

Aşağıdaki gibi bir dosya içeriğindeki adları listeleyelim.

Yusuf SEZER
Ramazan SEZER
Sinan SEZER
Mehmet SEZER

Adları listelemek için sadece $1 değişkenini kullanmak yeterli olacaktır.

awk '{print $1}' liste.txt

Awk varsayılan ayraç olan boşluk ile değerleri bölecek ve dolar işareti ($) ve sütun sırası ($1, $2,… ,$n) ile erişmeye imkan verecektir.

Varsayılan olan ayracı değiştirmek için -F parametresi kullanılır.

İşletim sistemindeki kullanıcıları listeleyelim.

Linux tabanlı işletim sisteminde kullanıcı bilgileri /etc/passwd dosyasında iki nokta (:) ile ayrılır.

cat /etc/passwd

Kullanıcı bilgileri iki nokta ile ayrıldığından -F parametresine bu ayracı vererek kullanıcı adlarını alabiliriz.

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

Awk okunan değer işlem yapmak için birden fazla komut kullanımına imkan verir.

echo "Merhaba dünya" | awk '{$2="Yusuf"; print $0}'

Uzun awk komutlarını yeni bir satırda yazmak için ters eğik çizgi (\) kullanmak faydalı olacaktır.

awk -F: \
'{print $1 " -> " $6}' \
/etc/passwd

Awk komutları bir başka dosya içinde de yer alabilir.

Bu durumda -f parametresi ile dosyada yer alan awk komutları çalıştırılır.

Aşağıdaki awk komutlarının komutlar olarak kaydedip çalıştıralım.

{
print $1 " -> " $6
}
awk -F: -f komutlar /etc/passwd

Uzun awk komutlarını dosyalara yazmak faydalı olacaktır.

Awk komutu ile işlem yaparken komut başlangıcında bilgi vermek için BEGIN anahtar kelimesi kullanılır.

awk -F: 'BEGIN {print "### Kullanıcı listesi ###"} {print $1}' /etc/passwd

Awk komutu ile işlem yaparken komut sonunda bilgi vermek için END anahtar kelimesi kullanılır.

awk -F: 'BEGIN {print "## Kullanıcı listesi ###"} {print $1} END {print "## Kullanıcı listesi ###"}' /etc/passwd

Awk ayrıca ayraç ile işlam yapmak için FS, OFS, ORS gibi anahtar kelimelere sahiptir.

Aşağıdaki komutları komutlar adında bir dosyaya kayıt edip.

BEGIN {
print "## Kullanıcı listesi ###"
print " Kullanıcı \t Dizin"
print "___________ \t __________"
FS=":"
}

{ print $1 "  \t  " $6 }

END {
print "## Kullanıcı listesi ###"
}

Aşağıdaki komutu çalıştırın.

awk -f komutlar  /etc/passwd

Ayrac yerine başka bir değer yerleştirmek için OFS anahtar kelimesi kullanılır.

awk 'BEGIN{FS=":"; OFS="---"} {print $1,$6}' /etc/passwd

Değerleri belirli bir uzunluğa göre almak için FIELDWIDTHS anahtar kelimesi kullanılır.

echo "Yusuf Sefa SEZER" | awk 'BEGIN{FIELDWIDTHS="5 5 6"}{print $1,$2,$3}'

Satır sonunu ifade eden değeri değiştirmek için RS anahtar kelimesi kullanılır.

<pre><code></code></pre>

Awk ayrıca işlem ile ilgili bilgi almak için ARGC, ARGV, ENVIRON, FILENAME, NF, NR, FNR, IGNORECASE anahtar kelimelerine sahiptir.

Parametre sayısı ve değerini almak için ARGC ve ARGV anahtar kelimesi kullanılır.

awk 'BEGIN{print ARGC, ARGV[1]}' /etc/passwd

Komut yorumlayıcısına ait değişkenlere ulaşmak için ENVIRON anahtar kelimesi kullanılır.

awk 'BEGIN{print ENVIRON["HOSTNAME"]}'

Mevcut satır sayısını almak için FNR, Toplam satır sayısını almak için NR anahtar kelimesi kullanılır.

awk 'BEGIN {FS=":"} {print FNR,"->"$1} END{print NR}' /etc/passwd

Değişken tanımlamak için sadece degiskenadi=deger yazılması yeterli olacaktır.

awk 'BEGIN{adim="Yusuf SEZER"; print adim}'

Awk koşul ve döngü yapısınada imkan verir.

 awk 'BEGIN { aranan = "Yusuf" } {if($1 == aranan) {  print aranan " " FNR ". satırda" } }' liste.txt

Awk çeşitli hesaplamalar yapmak ve çıktıyı iyi bir şekilde göstermek için matematik ve metin fonksiyonlarının kullanımına da imkan verir.

 awk '{print rand()}' liste.txt
awk 'FNR > 1 {print length($1) " " toupper($1) " " tolower($2)}' liste.txt

Awk komut kullanımı için çeşitli denemeler yapmak faydalı olacaktır.

Linux Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!