大きな UNIX テキスト ファイルがあり、一致する行の 3 行上にある行を取得したいと考えています。
どうやってやるの?
間に行を入れたくないことに注意してください。したがって、テキストが
one
two
three
four
文字列「three」を探しています。出力として取得したい
one
ではない
one
two
three
awk
http://www.gnu.org/software/gawk/manual/html_node/Array-Basics.html#Array-Basicsの使用
awk -v n=3 '{s[NR%n]=$0} /three/{print s[(NR-n+1)%n]}' foo.txt
以下のオプションで grep を使用します
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of matches.
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches.
したがって、要件に応じて、次のコマンドを使用します。
grep -B 3 three <filename>
これがその1つです:最初に、探している単語を2行前のコンテキストでgrepします:
$ grep -B 2
与える:
one
two
three
--
one
two
three
--
one
two
three
(...)
次に、sed を使用して 4 行ごとに出力します。
$ grep -B 2 three test.txt |sed -n '1~4'p
(ここから sed 部分を取得: http://www.thegeekstuff.com/2009/09/unix-sed-tutorial-printing-file-lines-using-address-and-patterns/