一致する行と一致する行内のn行目を印刷します。

一致する行と一致する行内のn行目を印刷します。

一致する行と一致する行(私が探している式を含む行)内の4行目を印刷しようとしています。

私は次のコードを使用しています: sed -n 's/^[ \t]*//; /img class=\"devil_icon/,4p' input.txt

しかし、これは一致する行だけを印刷します。

これにより、4行目だけが印刷されます。 awk 'c&&!--c;/img class=\"devil_icon/{c=4}' input.txt

一致する行と4行目を印刷するだけです。

ベストアンサー1

awkではできます

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

または

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

説明する

最初の解決策は一致する行をすべて探しますpattern。一致するものが見つかったら、NRレコード番号()を配列に保存しますnr。また、NR4番目のレコードも同じ配列に保存されます。nr[NR+4]その後、NR各レコード()を調べてそのレコードが配列にあることを確認し、nrレコードがあれば印刷するだけです。

第2の解決策は本質的に同じ方法で動作する。ただし、eに会うと、その行patternを印刷して4番目のレコードを配列に保存し、nr次のレコードに移動します。awk4番目のレコードに会うとブロックが実行NR in nrされ、その後+4レコードが印刷されます。

はい

これはサンプルデータファイルですsample.txt

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

最初の回避策を使用してください。

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

2番目の回避策を使用してください。

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

おすすめ記事