2015-08-21 2 views
0
tail -3000 ${file}.* | awk -vstart="${logStartTime}" -vend="${logEndTime}" \ 
    -vdate="${logDate}" '$1 == date && $2 > start && $2 < end {p=1} \ 
    $1 == date && $2 > end {p=0} p == 1 {print}' 

В настоящее время я могу распечатать, что удовлетворяет условию, но я хочу напечатать линию, которая удовлетворяет моему состоянию, а также линию рядом с ним.напечатайте линию, которая удовлетворяет моему состоянию, а также рядом с ней - awk

+0

Что 'рядом значит Оно деталь A.'? Перед этим или после этого или и то и другое, или что-то еще? Измените свой вопрос, чтобы показать пример ввода и ожидаемый результат. –

ответ

0

Это может быть simplfied немного:

tail -3000 ${file}.* | awk -vstart="${logStartTime}" -vend="${logEndTime}" \ 
    -vdate="${logDate}" '$1 == date && $2 > start && $2 < end {print; getline; print}' 

print после состояния, просто печатает строку (не нужно устанавливать переменную и проверить его позже). С getline awk читает следующую строку в своем буфере и print снова, чтобы распечатать эту строку.

+0

Это будет печатать соответствующую строку дважды, если она произошла в конце файла и содержит все другие общие оговорки getline. Если вы когда-либо рассматриваете возможность использования getline, убедитесь, что сначала прочитали и полностью поняли http://awk.info/?tip/getline (а затем вы не использовали бы его для чего-то подобного). –

0

Это AWK идиома будет делать

awk '/pattern/||!(n=!n)' 

печать, если соответствует шаблону или п не установлен, который будет перевернуто назад после оценки этого помещения.

В вашем случае замените /pattern/ с условием