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 dosyaAşağıdaki gibi bir dosya içeriğindeki adları listeleyelim.
Yusuf SEZER
Ramazan SEZER
Sinan SEZER
Mehmet SEZERAdları listelemek için sadece $1 değişkenini kullanmak yeterli olacaktır.
awk '{print $1}' liste.txtAwk 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/passwdKullanıcı bilgileri iki nokta ile ayrıldığından -F parametresine bu ayracı vererek kullanıcı adlarını alabiliriz.
awk -F: '{print $1}' /etc/passwdAwk 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/passwdAwk 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/passwdUzun 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/passwdAwk 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/passwdAwk 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/passwdAyrac yerine başka bir değer yerleştirmek için OFS anahtar kelimesi kullanılır.
awk 'BEGIN{FS=":"; OFS="---"} {print $1,$6}' /etc/passwdDeğ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/passwdKomut 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/passwdDeğ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.txtAwk ç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.txtawk 'FNR > 1 {print length($1) " " toupper($1) " " tolower($2)}' liste.txtAwk komut kullanımı için çeşitli denemeler yapmak faydalı olacaktır.
Linux Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.