awk 'BEGIN{n=0} /PATTERN/{n=NR+NUM} (NR>n){print}'
grep -v
と grep -A NUM
の合わせ技をやりたかったのですが、思ったようにできなかったので。
例)
$ cat sample
1 01 ABC
2 DEF
3 GHI
4 JKL
5 02 ABC
6 DEF
7 GHI
8 JKL
9 03 ABC
10 DEF
11 GHI
12 JKL
13 04 ABC
14 DEF
15 GHI
16 JKL
17 05 ABC
18 DEF
19 GHI
20 JKL
03 にマッチする行と,それに続く3行を取り除きます。
$ cat sample | awk 'BEGIN{n=0} /03/{n=NR+3} (NR>n){print}'
1 01 ABC
2 DEF
3 GHI
4 JKL
5 02 ABC
6 DEF
7 GHI
8 JKL
13 04 ABC
14 DEF
15 GHI
16 JKL
17 05 ABC
18 DEF
19 GHI
20 JKL
BEGINブロックはなくても・・・、でも個人的には付ける派です。
/03/ のブロックと (NR>n) のブロックを入れ替えると結果が変わります。
grep -B
や grep -C
と grep -v
の合わせ技は・・・どうやったらいいんでしょう?