удалите 2-ю строку вывода с помощью awk

У меня есть следующий вывод:

Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
date: 2014/11/18 21:00:43;  author: xxxxx;  state: Exp;  lines: +617 -594
revision 1.23

Если я вижу 2 даты: в выводе я хочу удалить ту всю строку из вывода. 2-я строка там, если dev на самом деле добавил число ошибки и объяснение, но во многих более старых checkins они не сделали так, это захватывает дату от регистрации перед этим. Я хотел бы иметь awk, удаляют любое 2-е происшествие даты: наряду со всей строкой текста позади него.

таким образом, я делаю grep date|awk 'FNR <3' для получения текста, который я хочу, но я хотел бы или плыть на плоскодонке он через awk снова для вычищения 2-й линии перемены даты, или объединиться он в один awk управляет если вообще возможный.

спасибо!

1
задан 26 October 2015 в 23:06

2 ответа

Используя awk и входной файл с именем foo

awk '! /^date/ {print} /^date/ && ! a {a=1; print}' foo

Вывод

Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
revision 1.23
<час>

, Если у Вас есть больше чем один блок Filename †¦ revision в одном файле, например,

Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
date: 2014/11/18 21:00:43;  author: xxxxx;  state: Exp;  lines: +617 -594
revision 1.23
Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
date: 2014/11/18 21:00:43;  author: xxxxx;  state: Exp;  lines: +617 -594
revision 1.23

, необходимо использовать

awk '! /^date/ {a=0; print} /^date/ && ! a {a=1; print}' foo

для получения

Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
revision 1.23
Filename:xxxxxxxx
date: 2014/12/24 14:46:41;  author: xxxxx;  state: Exp;  lines: +210 -206
revision 1.23
0
ответ дан 30 September 2019 в 06:35

Я знаю, что вопрос спрашивает специально для решения AWK, однако вот альтернативный Perl использования:

perl -ne 'if(/^date/){$x ne 0?$x=0:next}print' in
  • if(/^date/){[...]}: если текущая строка запускается с date строка, выполняет операторы, содержавшиеся в [...];
  • $x ne 0?$x=0:next: если x не равно 0, наборы x к 0; иначе перемещения к следующей строке;
  • print: печатает текущую строку
0
ответ дан 30 September 2019 в 06:35

Другие вопросы по тегам:

Похожие вопросы: