Trong awk, bạn sẽ làm như sau
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`
hoặc là
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`
Giải trình
Giải pháp đầu tiên tìm thấy tất cả các dòng phù hợp pattern
. Khi tìm thấy kết quả khớp, nó lưu số bản ghi ( NR
) trong mảng nr
. Nó cũng lưu trữ bản ghi thứ 4 từ NR
trong cùng một mảng. Điều này được thực hiện bởi nr[NR+4]
. Mỗi bản ghi ( NR
) sau đó được kiểm tra để xem nó có trong nr
mảng không, nếu vậy bản ghi được in.
Giải pháp thứ hai về cơ bản hoạt động theo cùng một cách, ngoại trừ khi nó gặp pattern
nó, nó in dòng đó, và sau đó lưu bản ghi thứ 4 trước nó trong mảng nr
, sau đó chuyển đến bản ghi tiếp theo. Sau đó, khi awk
gặp bản ghi thứ 4 này, NR in nr
khối sẽ được thực thi và in bản ghi +4 này sau đó.
Thí dụ
Đây là một tệp dữ liệu ví dụ , sample.txt
.
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
Sử dụng giải pháp thứ 1:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
Sử dụng giải pháp thứ 2:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4