Dosyadaki Alanları ve Sütunları Yazdırmak için Awk Nasıl Kullanılır
Linux Awk komut serimizin bu bölümünde Awk'un en önemli özelliklerinden biri olan alan düzenlemeye göz atacağız.
Awk'ın kendisine sağlanan giriş satırlarını otomatik olarak alanlara böldüğünü ve alanın, dahili bir alan ayırıcıyla diğer alanlardan ayrılan bir karakter kümesi olarak tanımlanabileceğini bilmekte fayda var.
Unix/Linux'a aşinaysanız veya bash kabuk programlama yapıyorsanız, dahili alan ayırıcının (IFS) değişkeninin ne olduğunu bilmelisiniz. Awk'taki varsayılan IFS sekme ve boşluktur.
Awk'da alan ayırma fikri şu şekilde çalışır: Bir giriş satırıyla karşılaştığında, tanımlanan IFS'ye göre ilk karakter kümesi birinci alan olur ve buna $1< kullanılarak erişilir., ikinci karakter kümesi $2 kullanılarak erişilen ikinci alandır, üçüncü karakter kümesi $3 kullanılarak erişilen üçüncü alandır vb. son karakter(ler) grubuna kadar.
Bu Awk alan düzenlemesini daha iyi anlamak için aşağıdaki örneklere göz atalım:
Örnek 1: tecmintinfo.txt adında bir metin dosyası oluşturdum.
vi tecmintinfo.txt
cat tecmintinfo.txt
Daha sonra komut satırından tecmintinfo.txtdosyasındaki birinci, ikinci ve üçüncü alanları yazdırmaya çalışıyorum. > aşağıdaki komutu kullanarak:
$ awk '//{print $1 $2 $3 }' tecmintinfo.txt
TecMint.comisthe
Yukarıdaki çıktıdan, ilk üç alandaki karakterlerin boşluk olarak tanımlanan IFS'ye göre yazdırıldığını görebilirsiniz:
- “TecMint.com ” olan birinci alana
$1
kullanılarak erişilir. - “Bu” olan ikinci alana
$2
kullanılarak erişilir. - “ ” olan üçüncü alana
$3
kullanılarak erişilir.
Yazdırılan çıktıda dikkat ettiyseniz alan değerleri birbirinden ayrılmamıştır ve print varsayılan olarak bu şekilde davranır.
Çıktıyı alan değerleri arasında boşluk bırakarak net bir şekilde görüntülemek için (,)
operatörünü aşağıdaki gibi eklemeniz gerekir:
$ awk '//{print $1, $2, $3; }' tecmintinfo.txt
TecMint.com is the
Unutulmaması ve her zaman hatırlanması gereken önemli bir nokta, Awk'da ($)
kullanımının kabuk komut dosyası oluşturmadaki kullanımından farklı olmasıdır.
Kabuk komut dosyasında ($)
, değişkenlerin değerine erişmek için kullanılırken, Awk ($)
yalnızca içeriğine erişirken kullanılır: bir alan ancak değişkenlerin değerine erişmek için değil.
Örnek 2: my_shoping.list adlı birden fazla satır içeren bir dosyayı kullanan başka bir örneğe bakalım.
No Item_Name Unit_Price Quantity Price
1 Mouse #20,000 1 #20,000
2 Monitor #500,000 1 #500,000
3 RAM_Chips #150,000 2 #300,000
4 Ethernet_Cables #30,000 4 #120,000
Diyelim ki alışveriş listesindeki her öğenin yalnızca Unit_Price
değerini yazdırmak istiyorsunuz, aşağıdaki komutu çalıştırmanız gerekecek:
$ awk '//{print $2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Awk ayrıca çıktınızı biçimlendirmenize yardımcı olan bir printf
komutuna da sahiptir; bu, yukarıdaki çıktının yeterince net olmadığını görebileceğiniz gibi güzel bir yoldur.
Item_Name ve Unit_Price çıktısını biçimlendirmek için printf
kullanımı:
$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Özet
Metni veya dizeleri filtrelemek için Awk kullanıldığında alan düzenleme çok önemlidir; bir listedeki sütunlardaki belirli verileri almanıza yardımcı olur. Ayrıca Awk'ta ($)
operatörünün kullanımının kabuk komut dosyasındakinden farklı olduğunu her zaman unutmayın.
Umarım makale size yardımcı olmuştur ve gerekli ek bilgiler veya sorularınız için yorum bölümüne yorum yazabilirsiniz.