Мне нужно найти строку в файле и распечатать совпадающие строки вместе с их следующими строками в другом файле. Пример:

Входной файл:

>3456/1
A
>1234/2
B
>5678/1
C
>8976/2
D

Искать: /2

Выход:

>1234/2
B
>8976/2
D
1
ahb65 11 Май 2014 в 09:17

4 ответа

Лучший ответ

Использование grep:

$ grep -A1 '/2' file
>1234/2
B
--
>8976/2
D

На странице man:

-A num, --after-context=num
             Print num lines of trailing context after each match.  

Вы можете удалить --, подключив его к grep -v '--', или, если у вас есть GNU grep, вы можете просто сделать:

$ grep --no-group-separator -A1 '/2' file
>1234/2
B
>8976/2
D

Вы можете перенаправить вывод этой команды в другой файл.

4
jaypal singh 11 Май 2014 в 05:21

Использование GNU sed

sed -n '/\/2/,+1p' file

Примере:

$ sed -n '/\/2/,+1p' file
>1234/2
B
>8976/2
D
1
Avinash Raj 11 Май 2014 в 05:40

Используйте grep -A

См. Справочную страницу:

 -A num, --after-context=num
         Print num lines of trailing context after each match.  See also the -B and -C options.
 -B num, --before-context=num
         Print num lines of leading context before each match.  See also the -A and -C options.
-C[num, --context=num]
         Print num lines of leading and trailing context surrounding each match.  The default is 2 and is equivalent to -A 2 -B 2.  Note: no whitespace may be given between the option and its argument.

Вот пример:

%grep -A2 /2 input
>1234/2
B
>5678/1
--
>8976/2
D
0
Good Person 11 Май 2014 в 05:32

Вот grep правильный инструмент, но, используя awk, вы получите:

awk '/\/2/ {print $0;getline;print $0}' file
>1234/2
B
>8976/2
D

PS Вы должны были найти это самостоятельно, используя goolge. Об этом спрашивают много раз.

0
Jotne 11 Май 2014 в 05:39