GNU/Linux >> Linux の 問題 >  >> Linux

一致する行と一致する行から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行目の両方を印刷する必要があります。

承認された回答:

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)が保存されます。 )配列内nrNRからの4番目のレコードも保存します 同じ配列内。これはnr[NR+4]によって行われます 。すべてのレコード(NR )は、nrに存在するかどうかを確認するためにチェックされます 配列の場合、レコードが印刷されます。

2番目のソリューションは、patternに遭遇した場合を除いて、基本的に同じように機能します。 その行を出力してから、その前の4番目のレコードを配列nrに格納します。 、次に次のレコードに移動します。次に、awk この4番目のレコードに遭遇します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

Linux
  1. LinuxコマンドラインからのI/Oレポート

  2. コマンドラインでXキーとポインターグラブを操作しますか?

  3. コマンドラインからIcewmを再起動する方法は?

  1. パターンに一致する連続する行のすべてのシーケンスの最初の行だけを保持しますか?

  2. コマンドラインからWordPressのバージョンを見つける

  3. CLI から、ファイルの最後の行を出力します。

  1. コマンドラインからリモートでLinuxワークスペースを構成する

  2. キャッシュ ラインに合わせてキャッシュ ラインのサイズを知る

  3. コマンドラインから IP アドレスを取得するにはどうすればよいですか?