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.