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:

  1. “TecMint.com ” olan birinci alana $1 kullanılarak erişilir.
  2. “Bu” olan ikinci alana $2 kullanılarak erişilir.
  3. “ ” 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.