GNU/Linux >> Belajar Linux >  >> Linux

Cetak Garis Pencocokan Dan Garis Ke-N Dari Garis Yang Cocok?

Saya mencoba mencetak baris yang cocok dan baris ke-4 dari baris yang cocok (baris yang berisi ekspresi yang saya cari).

Saya telah menggunakan kode berikut:
sed -n 's/^[ t]*//; /img class="devil_icon/,4p' input.txt

Tapi ini hanya mencetak baris yang cocok.

Ini hanya mencetak baris ke-4.
awk 'c&&!--c;/img class="devil_icon/{c=4}' input.txt

Saya perlu mencetak baris yang cocok dan baris ke-4 saja.

Jawaban yang Diterima:

Dalam awk, Anda akan melakukannya sebagai berikut

awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`

atau

awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`

Penjelasan

Solusi pertama menemukan semua baris yang cocok dengan pattern . Ketika menemukan kecocokan, ia menyimpan nomor catatan (NR ) dalam larik nr . Itu juga menyimpan catatan ke-4 dari NR dalam larik yang sama. Ini dilakukan oleh nr[NR+4] . Setiap catatan (NR ) kemudian diperiksa untuk melihat apakah ada di nr array, jika demikian catatan dicetak.

Solusi kedua pada dasarnya bekerja dengan cara yang sama, kecuali ketika menemukan pattern itu mencetak baris itu, dan kemudian menyimpan catatan ke-4 di depannya dalam larik nr , lalu pergi ke rekaman berikutnya. Kemudian ketika awk menemukan catatan ke-4 ini NR in nr blok akan dieksekusi dan mencetak catatan +4 ini setelahnya.

Contoh

Berikut ini contoh file data, sample.txt .

$ cat sample.txt 
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16

Menggunakan solusi pertama:

$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt 
4 blah
8
10 blah
14

Menggunakan solusi ke-2:

$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt 
4 blah
8
10 blah
14

Linux
  1. Konfigurasikan ruang kerja Linux dari jarak jauh dari baris perintah

  2. Memanipulasi X Key Dan Pointer Grabs Di Command Line?

  3. Perangkap, Err, Dan Menggaungkan Garis Kesalahan?

  1. Tambahkan Teks yang Cocok Ke Baris?

  2. Temukan versi WordPress dari baris perintah

  3. Bagaimana saya bisa membuat grep mencetak baris di bawah dan di atas setiap baris yang cocok?

  1. Menggunakan awk untuk mencetak semua kolom dari n ke yang terakhir

  2. Menyelaraskan ke baris cache dan mengetahui ukuran baris cache

  3. Bagaimana cara mendapatkan alamat IP saya dari baris perintah?