AWK - Çıktı Yeniden Yönlendirme

Şimdiye kadar, standart çıktı akışındaki verileri gösterdik. Verileri bir dosyaya da yönlendirebiliriz. Sonra bir yeniden yönlendirme görünür.print veya printfBeyan. AWK'daki yeniden yönlendirmeler, AWK programı içinde yazılmaları dışında, kabuk komutlarındaki yeniden yönlendirme gibi yazılır. Bu bölüm yeniden yönlendirmeyi uygun örneklerle açıklamaktadır.

Yeniden Yönlendirme Operatörü

Yeniden yönlendirme operatörünün sözdizimi -

Sözdizimi

print DATA > output-file

Verileri output-file. Çıktı dosyası yoksa, bir tane oluşturur. Bu tür yeniden yönlendirme kullanıldığında, ilk çıktı kendisine yazılmadan önce çıktı dosyası silinir. Aynı çıktı dosyasına sonraki yazma işlemleri çıktı dosyasını silmez, ona ekler. Örneğin, aşağıdaki örnek şöyle yazar:Hello, World !!! dosyaya.

Bazı metin verileriyle bir dosya oluşturalım.

Misal

[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt

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

Çıktı

Old data

Şimdi, AWK'nın yeniden yönlendirme operatörünü kullanarak bazı içerikleri buna yönlendirelim.

Misal

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

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

Çıktı

Hello, World !!!

Operatör Ekle

Ekleme operatörünün sözdizimi aşağıdaki gibidir -

Sözdizimi

print DATA >> output-file

Verileri, output-file. Çıktı dosyası yoksa, bir tane oluşturur. Bu tür bir yönlendirme kullanıldığında, yeni içerik dosyanın sonuna eklenir. Örneğin, aşağıdaki örnek,Hello, World !!! dosyaya.

Bazı metin verileriyle bir dosya oluşturalım.

Misal

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

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

Çıktı

Old data

Şimdi AWK'nın ekleme operatörünü kullanarak bazı içerikleri buna ekleyelim.

Misal

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

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

Çıktı

Old data
Hello, World !!!

Boru

Bir dosya kullanmak yerine bir boru aracılığıyla başka bir programa çıktı göndermek mümkündür. Bu yeniden yönlendirme, komut için bir kanal açar ve bu kanal aracılığıyla öğelerin değerlerini komutu yürütmek için başka bir işleme yazar. Yeniden yönlendirme bağımsız değişken komutu aslında bir AWK ifadesidir. İşte borunun sözdizimi -

Sözdizimi

print items | command

Kullanalım tr küçük harfleri büyük harfe dönüştürme komutu.

Misal

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

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

Çıktı

HELLO, WORLD !!!

İki yönlü iletişim

AWK, aşağıdakileri kullanarak harici bir işlemle iletişim kurabilir: |&, bu iki yönlü iletişimdir. Örneğin, aşağıdaki örnektetrküçük harfleri büyük harfe dönüştürme komutu. bizimcommand.awk dosya -

Misal

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   
   cmd |& getline out
   print out;
   close(cmd);
}

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

Çıktı

HELLO, WORLD !!!

Komut dosyası şifreli görünüyor mu? Açıklığa kavuşturalım.

  • İlk ifade, cmd = "tr [a-z] [A-Z]", AWK'dan iki yönlü iletişimi kurduğumuz komuttur.

  • Sonraki ifade, yani yazdırma komutu, trkomut. Buraya&| iki yönlü iletişimi gösterir.

  • Üçüncü ifade, yani close(cmd, "to"), kapatır to yürütme rekabetinden sonra süreç.

  • Bir sonraki ifade cmd |& getline out depolar output getline işlevi yardımıyla değişkene dönüşür.

  • Bir sonraki print ifadesi çıktıyı ve son olarak close işlevi komutu kapatır.