awk sep data mengekstraksi baris setelah variabel tertentu

Saya memiliki file besar yang memiliki pola teratur

       snaps1:          Counter:             4966
        Opens:          Counter:           357283

     Instance:     s.1.aps.userDatabase.mount275668.attributes


       snaps1:          Counter:             0
        Opens:          Counter:           357283

     Instance:     s.1.aps.userDatabase.test.attributes

Garis-garis ini diulangi di antara garis-garis lain di atas dan di bawah. Saya perlu mencetak baris snaps1 dan juga mendapatkan baris instance: Jadi saya perlu mencari snaps1 tetapi hanya jika penghitung lebih besar dari 0 dan kemudian mencetak baris snaps1 dan juga baris instance.

Maaf tidak tahu bagaimana melakukan ini? Bisakah kamu menolong?

Jadi dari baris di atas saya akan melihat keluaran ini

snaps1:          Counter:             4966
Instance:        s.1.aps.userDatabase.mount275668.attributes

Hargai bantuan apa pun yang dapat Anda berikan


person theuniverseisflat    schedule 23.11.2015    source sumber
comment
Terima kasih juga dan penjelasan detail Anda   -  person theuniverseisflat    schedule 24.11.2015


Jawaban (2)


Coba ini:

awk '/snaps1/ && $NF>0{print;f=1}f&&/Instance/{print;f=0}' file

Untuk menghindari kekosongan di awal baris:

awk '/snaps1/ && $NF>0{gsub(/^ */,"");print;f=1}
     f&&/Instance/    {gsub(/^ */,"");print;f=0}'  file

Hasil

snaps1:          Counter:             4966
Instance:     s.1.aps.userDatabase.mount275668.attributes

Penjelasan

/snaps1/ && $NF>0 {gsub(/^ */,"");print;f=1} digunakan untuk menyetel f bendera ketika pola snaps1 ditemukan dan bidang terakhir NF harus lebih besar dari satu juga menghapus spasi yang tidak diinginkan dan mencetak baris saat ini.

CATATAN /snaps1/ && $NF ini adalah ekspresi yang setara, alasannya: nilai numerik apa pun kecuali nol adalah benar untuk awk.

f&&/Instance/ {gsub(/^ */,"");print;f=0} jika bendera f adalah True (1) dan pola Instance ditemukan, cetak baris saat ini (menghapus spasi yang tidak diinginkan) dan mengembalikan bendera ke false.

person Juan Diego Godoy Robles    schedule 23.11.2015
comment
Hai dan terima kasih saya mencoba perintah Anda tetapi mendapatkan kesalahan sintaksis? awk '/snaps1/{s=$0; c=$NF} /Instance/ && c{print s ORS $0}' adsmobout.21.37.59 awk: kesalahan sintaksis dekat baris 1 awk: bailing out dekat baris 1 - person theuniverseisflat; 23.11.2015
comment
Maaf jika terlambat / menunda respons-- Perintah Anda juga berfungsi. Maafkan saya, saya mencoba memahami cara kerjanya.... - person theuniverseisflat; 02.12.2015

person    schedule
comment
Hai, saya juga mencoba perintah Anda - masih mendapatkan awk: kesalahan sintaksis dekat baris 1 awk: bailing out dekat baris 1 Saya juga mencoba cat file dan pip perintah kesalahan yang sama - person theuniverseisflat; 23.11.2015
comment
Pesan kesalahan tersebut hanya berasal dari awk lama yang rusak yang sayangnya merupakan awk default pada Solaris. Jika Anda menggunakan Solaris, gunakan /usr/xpg4/bin/awk (atau kurang berfungsi dan non-POSIX tetapi nawk juga berfungsi dengan baik untuk banyak hal). Di semua sistem, cobalah untuk mendapatkan/menggunakan GNU awk jika memungkinkan. - person Ed Morton; 23.11.2015
comment
Hai terima kasih atas balasan cepatnya - Saya sudah mencoba /usr/xpg4/bin/awk dan saya menjalankannya pada file saya dan tidak ada hasil sama sekali.. Saya tahu ada baris dengan itu - person theuniverseisflat; 23.11.2015