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.