@s04v1_1h
sysadmin

Как выбрать нужно количество строк из файла?

Есть вот такой файл
HTTP/2 301 
location: https://www.google.com/
content-type: text/html; charset=UTF-8
cache-control: public, max-age=2592000
server: gws
content-length: 220
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000

HTTP/2 301 
location: https://www.google.com/
content-type: text/html; charset=UTF-8
cache-control: public, max-age=2592000
server: gws
content-length: 220
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000


Мне нужно отделить последний ответ в отдельный файл. Но проблема в том, что я не знаю сколько строк будет занимать ответ, но я знаю что он будет отделен от предыдущего новой строкой(как в примере).
Как такое сделать в BASH?
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ответы на вопрос 4
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
tac file | sed -n '1,/^$/{/./p}' | tac
Первый tac читает файл задом наперёд, sed вырезает первый блок непустых строк, второй tac переворачивает этот блок в исходное состояние.
Ответ написан
@q27off
Печать последнего ответа:
awk '{/^HTTP/ && n = 1; rows[n++] = $0} END {for (i = 1; i < n; ++i) print rows[i]}' input.txt

Печать всех ответов, начиная со второго (актуально для вашего примера):
sed -n ' 0,/^$/!p' input.txt
Ответ написан
Комментировать
Adamos
@Adamos
1. Задаете переменную FILE_N - порядковый номер выходного файла
2. Читаете построчно этот свой исходный файл.
3. Сравниваете считанное с маской ^HTTP/2
4. Если совпадает, увеличиваете FILE_N
5. Отправляете прочитанную строку в файл, имя которого сформировано из FILE_N
6. Конец цикла, начатого в п. 2
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Предполагаю, что ориентироваться лучше все-таки на заголовок, а не на пустую строку:
tac file | sed -n '1,/^HTTP\/2/p' | tac
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы