распечатать все строки, следующие за соответствующей строкой - PullRequest
0 голосов
/ 27 октября 2010

Как можно распечатать все строки после сопоставления с образцом в n-й строке, но игнорировать все до сопоставленной строки, включая совпадающую строку, вот пример:

row1 something in this row
row2 something in this row
row3 something in this row
row4 don't need to match the whole line, something like java String.contains()
row5 something in this row
row6 something in this row
row7 something in this row
row8 something in this row
row9 something in this row
row10 something in this row

Я хочу напечатать строки, следующие за строкой, содержащей строку row4 в любом месте этой строки, возможно ли это с помощью awk или sed, или каким-либо другим способом?

Вывод должен быть:

row5 something in this row
row6 something in this row
row7 something in this row
row8 something in this row
row9 something in this row
row10 something in this row

Я видел похожий вопрос:

Awk - распечатать следующую запись после соответствующей записи

Но я не уверен, как адаптировать его под свои нужды.

Ответы [ 6 ]

2 голосов
/ 27 октября 2010

Попробуйте это:

sed '1,/row4/d' inputfile
1 голос
/ 27 октября 2010

Если с Perl все в порядке, вы можете сделать:

perl -ne 'print if($f); $f=1 if(/row4/)'

Код в действии

0 голосов
/ 27 октября 2010
 awk 'c&&c>0;/row4/{c=5}' file
0 голосов
/ 27 октября 2010
awk -v pattern="row4" 'go {print} $0 ~ pattern {go = 1}' input_file
0 голосов
/ 27 октября 2010

Это работает, гуру, вероятно, может значительно сократить его:

#!/usr/bin/perl
$pat = shift(@ARGV);
$p = 0;
while(<>) {
  if ($p == 1) { print $_;}
  if ($_ =~ /$pat/) {
    $p = 1;
  }
}

Из командной строки:

$ ./p.pl dat4 datafile
0 голосов
/ 27 октября 2010

Вы используете следующую команду:

grep -A 5 "row4" test.txt

Вывод будет:

row4
row5
row6
row7
row8
row9

-A идет для After, и, аналогично, вы можете использовать клавишу -B, которая идет для Before. 5 - количество строк для вывода. Конечно, вы можете выбрать все, что захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...