2

大きな UNIX テキスト ファイルがあり、一致する行の 3 行上にある行を取得したいと考えています。

どうやってやるの?

間に行を入れたくないことに注意してください。したがって、テキストが

one
two
three
four

文字列「three」を探しています。出力として取得したい

one

ではない

one
two
three
4

3 に答える 3

1

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
于 2012-07-19T09:35:58.133 に答える
0

以下のオプションで 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>
于 2012-07-19T09:00:35.010 に答える
0

これがその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/

于 2012-07-19T09:04:35.613 に答える