У меня есть следующий вывод:
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 управляет если вообще возможный.
спасибо!
Используя 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
Я знаю, что вопрос спрашивает специально для решения 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
: печатает текущую строку