複数の文字列をGrepして、文字列の1つに続く行数を表示します(他の文字列は表示しません)。

複数の文字列をGrepして、文字列の1つに続く行数を表示します(他の文字列は表示しません)。

ファイルから複数の文字列を検索し、特定の文字列を検索して、その後の5行も表示したいと思います。

cat file | grep -e 'string1' -e 'string2'

もちろん動作しますが、次のようなものを取得したいと思います。

cat file | grep -e 'string1' -e -A 5 'string2'

string1を含む行のみを表示し、string2を含む行とstring2の後の5行だけを表示し、string1の後の5行を表示しないようにするにはどうすればよいですか(-A 5オプションを使用すると仮定)。

編集:ちょうどawkで作業しました。

cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}'

ベストアンサー1

awkコードについて

awk '/string1/ {if ( c <= 0 ) c = 1;} /string2/ {c=5} { if (c-- > 0) print; }' file
  • いいえcat ... | awk、awkはファイルを読み取ることができます。
  • テストを並べ替えました(string1がstring2の後に1行続くと、OPソリューションで印刷が中断されます)。

おすすめ記事