Soru Boş satırları atlamak için Awk


Komut dizimin çıktısı kullanılarak ayrılmış sekme awk gibi :

awk -v variable=$bashvariable  '{print variable"\t single\t" $0"\t double"}' myinfile.c

awk komutu, her döngü için değişken değerini ve myinfile.c dosyasını güncelleyen bir while döngüsünde çalıştırılır. Bu komutla beklenen sonuçları alıyorum. Ancak, inmyfile.c boş bir satır içeriyorsa (içerebilir) ilgili bilgi yazdırmaz. anlatabilir miyim awk boş satırı göz ardı etmek için?

Bunu yapmadan önce myinfile.c adresinden boş satırları kaldırarak yapılabileceğini biliyorum. awk . Bilgim var sed ve tr ama ben istiyorum awk Yukarıda belirtilen komuta kendi başına ve aşağıda olduğu gibi ayrı bir çözüm ya da bir piped değil.

sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c

Önerileriniz ve cevaplarınız için şimdiden teşekkür ederiz.


25
2017-07-27 11:51


Menşei




Cevaplar:


Çizgileri filtrelemeyi deneyebileceğiniz iki yaklaşım vardır:

awk 'NF' data.txt

ve

awk 'length' data.txt

Bunları sadece komutunuzun başlangıcına koyun, yani,

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile

veya

awk -v variable=$bashvariable 'length { print variable  ... }' myinfile

Bunların ikisi de kapı bekçileri / if deyimleri gibi davranır.

İlk yaklaşım, sadece alanların sayısının olduğu çizgileri yazdırmak suretiyle çalışır.NF) sıfır değildir (yani sıfırdan büyüktür).

İkinci yöntem, çizgi uzunluğuna bakar ve uzunluk sıfır değilse (yani sıfırdan büyükse) davranır.

Verileriniz / ihtiyaçlarınız için en uygun olan yaklaşımı seçebilirsiniz.


40
2017-07-27 11:54





Sadece ekleyebilirsin

/^\s*$/ {next;}  

Komut dosyanızın önüne boş satırlarla eşleşecek ve garip uydurma kurallarının geri kalanını atlayacaktır. Hepsini bir araya getirmek:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c

9
2017-07-27 11:56





Bunu deneyebilir miydin?

awk -v variable=$bashvariable  '$0{print variable"\t single\t" $0"\t double"}' myinfile.c

2
2017-07-27 11:54





Bunu dene:

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c

1
2017-07-27 11:54