Linux'ta Awk ile 'sonraki' Komutu Nasıl Kullanılır - Bölüm 6


Awk serisinin bu altıncı bölümünde, Awk'a sağladığınız kalan tüm kalıpları ve ifadeleri atlayıp bunun yerine sonrakini okumasını söyleyen next komutunu kullanmaya bakacağız. giriş hattı.

next komutu, komut yürütmede zaman kaybettiren adımlar olarak adlandırdığım adımların yürütülmesini engellemenize yardımcı olur.

Nasıl çalıştığını anlamak için food_list.txt adlı ve şuna benzeyen bir dosyayı ele alalım:

No      Item_Name               Price           Quantity
1       Mangoes                 $3.45              5
2       Apples                  $2.45              25
3       Pineapples              $4.45              55
4       Tomatoes                $3.45              25
5       Onions                  $1.45              15
6       Bananas                 $3.45              30

Miktarı 20'ye eşit veya daha az olan gıda maddelerini her satırın sonunda (*) işaretiyle işaretleyecek aşağıdaki komutu çalıştırmayı düşünün:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt 

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

Yukarıdaki komut aslında şu şekilde çalışır:

  1. İlk olarak, her giriş satırının dördüncü alanı olan miktarın 20'den küçük veya ona eşit olup olmadığını kontrol eder, bir değer bu koşulu karşılıyorsa yazdırılır ve (*) ile işaretlenir. birinci ifadeyi kullanarak sonda imzalayın: $4 <= 20
  2. İkinci olarak, her giriş satırının dördüncü alanının 20'den büyük olup olmadığını kontrol eder ve bir satır koşulu karşılıyorsa ikinci ifadeyi kullanarak yazdırılır: $4 > 20

Ancak burada bir sorun var; ilk ifade çalıştırıldığında, işaretlemek istediğimiz bir satır şunu kullanarak yazdırılıyor: { printf "%s\t%s\n", $0, "**"; ve ardından aynı adımda ikinci ifade de kontrol edilir ve bu da zaman kaybettirici bir faktör haline gelir.

Bu nedenle, ilk ifade kullanılarak yazdırılmış olan işaretli satırları yazdırdıktan sonra ikinci ifade olan $4 > 20'yi tekrar çalıştırmaya gerek yoktur.

Bu sorunla başa çıkmak için next komutunu aşağıdaki gibi kullanmanız gerekir:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

$4 <= 20 kullanılarak tek bir giriş satırı yazdırıldıktan sonra { printf "%s\t%s\n", $0,"*" ; Sonraki ; , dahil edilen next komutu, ikinci $4 > 20 { print $0 ; ifadesinin atlanmasına yardımcı olur, böylece yürütme şu şekilde gerçekleşir: miktarın 20'den büyük olup olmadığını kontrol ederek zaman kaybetmenize gerek kalmadan bir sonraki giriş satırına geçin.

Sonraki komut, etkili komutlar yazmak için çok önemlidir ve gerektiğinde, bir betiğin yürütülmesini hızlandırmak için her zaman kullanabilirsiniz. Serinin, Awk için girdi olarak standart (STDIN) girişini kullanmaya bakacağımız bir sonraki bölümüne hazırlanın.

Umarım bu nasıl rehberliği faydalı bulursunuz ve aşağıdaki yorum bölümüne bir yorum bırakarak düşüncelerinizi her zaman olduğu gibi yazılı olarak belirtebilirsiniz.