AWK - Güzel Baskı

Şimdiye kadar AWK'leri kullandık print ve printfstandart çıktıda verileri görüntülemek için işlevler. Ancak printf, daha önce gördüklerimizden çok daha güçlü. Bu işlev C dilinden alınmıştır ve biçimlendirilmiş çıktı üretirken çok faydalıdır. Printf ifadesinin sözdizimi aşağıdadır -

Sözdizimi

printf fmt, expr-list

Yukarıdaki sözdiziminde fmt biçim belirtimleri ve sabitlerinden oluşan bir dizedir. expr-list biçim belirleyicilerine karşılık gelen bağımsız değişkenlerin listesidir.

Kaçış dizileri

Herhangi bir dizeye benzer şekilde, format gömülü kaçış dizileri içerebilir. Aşağıda tartışılanlar, AWK tarafından desteklenen kaçış dizileridir -

Yeni hat

Aşağıdaki örnek yazdırılır Hello ve World yeni satır karakterini kullanarak ayrı satırlarda -

Example

[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Hello
World

Yatay sekme

Aşağıdaki örnek, farklı alanı görüntülemek için yatay sekme kullanır -

Example

[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'

Yukarıdaki kodu çalıştırdığınızda aşağıdaki sonucu alırsınız -

Output

Sr No   Name    Sub Marks

Dikey Sekme

Aşağıdaki örnek, her dosyalandıktan sonra dikey sekme kullanır -

Example

[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Sr No
   Name
      Sub
         Marks

Geri tuşu

Aşağıdaki örnek, sonuncusu dışındaki her alandan sonra bir geri tuşu yazdırır. İlk üç alandan son sayıyı siler. Örneğin,Field 1 olarak görüntülenir Field, çünkü son karakter backspace ile silinir. Ancak son alanField 4 olduğu gibi görüntüleniyor, çünkü bir \b sonra Field 4.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Field Field Field Field 4

Satırbaşı

Aşağıdaki örnekte, her alanı yazdırdıktan sonra, Carriage Return ve sonraki değeri geçerli yazdırılan değerin üstüne yazdırın. Bu, son çıktıda yalnızca görebileceğiniz anlamına gelirField 4, önceki tüm alanların üstüne basılacak son şey olduğu için.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Field 4

Form besleme

Aşağıdaki örnek, her alanı yazdırdıktan sonra form beslemeyi kullanır.

Example

[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Sr No
   Name
      Sub
         Marks

Biçim Tanımlayıcısı

C dilinde olduğu gibi, AWK'nın da format belirleyicileri vardır. Printf ifadesinin AWK sürümü aşağıdaki dönüştürme özelliği biçimlerini kabul eder -

% c

Tek bir karakter yazdırır. Argüman için kullanılırsa%csayısaldır, bir karakter olarak değerlendirilir ve yazdırılır. Aksi takdirde, argümanın bir dize olduğu varsayılır ve bu dizenin tek ilk karakteri yazdırılır.

Example

[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'

Output

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

ASCII value 65 = character A

% d ve% i

Ondalık sayının yalnızca tam sayı kısmını yazdırır.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 80

% e ve% E

[-] d.dddddde [+ -] dd biçiminde bir kayan nokta sayısı yazdırır.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 8.066000e+01

%E format kullanır E e yerine.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 8.066000E+01

% f

[-] ddd.dddddd biçiminde bir kayan nokta sayısı yazdırır.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 80.660000

% g ve% G

% E veya% f dönüşümünü (hangisi daha kısaysa) kullanır ve anlamlı olmayan sıfırlar bastırılır.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'

Output

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Percentags = 80.66

%G format kullanır %E % e yerine.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 80.66

İşaretsiz sekizlik bir sayı basar.

Example

[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Octal representation of decimal number 10 = 12

% u

İşaretsiz bir ondalık sayı yazdırır.

Example

[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Unsigned 10 = 10

% s

Bir karakter dizisi yazdırır.

Example

[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Name = Sherlock Holmes

% x ve% X

İşaretsiz bir onaltılık sayı basar. %X format, küçük harf yerine büyük harfler kullanır.

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Hexadecimal representation of decimal number 15 = f

Şimdi% X kullanalım ve sonucu gözlemleyelim -

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Hexadecimal representation of decimal number 15 = F

%%

Tek bir % karakter ve hiçbir bağımsız değişken dönüştürülmez.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Percentags = 80%

% İle İsteğe Bağlı Parametreler

İle % aşağıdaki isteğe bağlı parametreleri kullanabiliriz -

Genişlik

Alan, width. Varsayılan olarak, alan boşluklarla doldurulur, ancak 0 bayrağı kullanıldığında, sıfırlarla doldurulur.

Example

[jerry]$ awk 'BEGIN { 
   num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2 
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Num1 =         10
Num2 =         20

Lider Sıfırlar

Baştaki sıfır, çıktının boşluklar yerine sıfırlarla doldurulması gerektiğini belirten bir bayrak görevi görür. Lütfen bu bayrağın yalnızca alan yazdırılacak değerden daha geniş olduğunda bir etkiye sahip olduğunu unutmayın. Aşağıdaki örnek bunu açıklamaktadır -

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2 
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Num1 = -0010
Num2 = 00020

Sola Yaslama

İfade, alanı içinde sola dayalı olmalıdır. Girdi dizesi belirtilen karakter sayısından azsa ve sola yaslanmasını istiyorsanız, yani sağa boşluklar ekleyerek,% 'den hemen sonra ve sayıdan önce bir eksi simgesi (-) kullanın.

Aşağıdaki örnekte, AWK komutunun çıktısı, SATIRININ SONU ($) karakterini görüntülemek için cat komutuna aktarılmıştır.

Example

[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Num = 10   $

Önek İşareti

Değer pozitif olsa bile, sayısal değerlerin önüne her zaman bir işaret koyar.

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2 
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Num1 = -10
Num2 = +20

Hash

% O için baştaki sıfır sağlar. % X ve% X için, yalnızca sonuç sıfır değilse, sırasıyla başına 0x veya 0X sağlar. % E,% E,% f ve% F için sonuç her zaman bir ondalık nokta içerir. % G ve% G için, sondaki sıfırlar sonuçtan kaldırılmaz. Aşağıdaki örnek bunu açıklamaktadır -

Example

[jerry]$ awk 'BEGIN { 
   printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'

Bu kodu çalıştırdığınızda şu sonucu alırsınız -

Output

Octal representation = 012
Hexadecimal representation = 0XA