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 pattern
. Ketika menemukan kecocokan, ia menyimpan nomor rekaman ( NR
) dalam array nr
. Ini juga menyimpan catatan ke-4 dari NR
dalam array yang sama. Ini dilakukan oleh nr[NR+4]
. Setiap record ( NR
) kemudian diperiksa untuk melihat apakah ada dalam nr
array, jika demikian record dicetak.
Solusi kedua bekerja pada dasarnya dengan cara yang sama, kecuali ketika bertemu dengan pattern
itu mencetak garis itu, dan kemudian menyimpan catatan ke-4 di depannya dalam array nr
, kemudian pergi ke catatan 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 1:
$ 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
egrep "pattern" -A4