打印满足我条件的行以及旁边的行 - awk

时间:2015-08-21 10:39:23

标签: unix awk text-processing gawk

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}'

目前我可以打印满足条件的那个,但是我想要打印满足我条件的行以及它旁边的行。

2 个答案:

答案 0 :(得分:0)

这可以简化一下:

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

条件之后的print in,只打印该行(无需设置变量并稍后检查)。使用getline awk将下一行读入其缓冲区,然后再次print打印该行。

答案 1 :(得分:0)

这个awk成语会做

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

如果未设置匹配模式或n,则打印,在评估该前提后将翻回。

在你的情况下,用条件替换/pattern/