パターンが一致する場合は、上の行と下の4行を印刷します。

パターンが一致する場合は、上の行と下の4行を印刷します。

次のデータを含むテキストファイルinput.txtがあります。

$ cat input.txt

text1
error
text2
text3
text4
xyz
asd
asdf
text10
error
text11
text12
text13
text14
def
ghi
jkl
text16
error
text17
text18
text19
text20

入力ファイルで「エラー」を検索しています。したがって、パターンが一致した場合は、前の行と次の4行を印刷する必要があります。また、パターンが複数回発生する可能性があります。

次の出力が必要です

text1
error
text2
text3
text4
text10
error
text11
text12
text13
text14
text16
error
text17
text18
text19
text20

OSはSolarisなのでgrep -Aここでは動作しません

答え1

そしてawk

awk '/error/ {n = 6}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

または、6行(重なりがないと仮定)の間に空白行を追加します。

awk '/error/ {n = 6; if (x++) print ""}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

Solarisで使用してください/usr/xpg4/bin/awk。の構文は1970年代の以前のバージョンであり、最新の標準構文をサポートしていません。nawk/usr/gnu/bin/awk/bin

/usr/gnu/bin/awk(パッケージ)がある場合(パッケージ)もあるtext/gawk可能性が高く、対応/拡張を使用できます。/usr/gnu/bin/greptext/gnu-grep-A-B

/usr/gnu/bin/grep -B1 -A4 error < your-file

(GNUはgrep重複しないグループを線分けします--)。

関連情報