次のデータを含むテキストファイル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/grep
text/gnu-grep
-A
-B
/usr/gnu/bin/grep -B1 -A4 error < your-file
(GNUはgrep
重複しないグループを線分けします--
)。