2016-07-12 6 views
0

У меня есть файл ниже форматеAWK: Проверьте, является ли число между двумя числами

02 Jul 2016 00:00:00 2736359 
02 Jul 2016 00:02:00 2736594 
02 Jul 2016 00:04:00 2736828 
02 Jul 2016 00:06:00 2737068 
02 Jul 2016 00:08:00 2737303 
02 Jul 2016 00:10:00 2737542 
02 Jul 2016 00:12:00 2737775 
02 Jul 2016 00:14:00 2738011 
02 Jul 2016 00:16:00 2738251 
02 Jul 2016 00:18:00 2738483 

Если первый столбец является штамп времени и второй ряд. Учитывая ввод 2737778, я хочу, чтобы результат был «02 июля 2016 00:12:00 и 02 июля 2016 00:14:00», поскольку 2737778 находится между 2737775 и 2738011. Могу ли я сделать это в awk? Можно ли сравнить число в текущей строке со следующей строкой?

ответ

1

Да, можно читать вперед в awk, см. Peek at next line, but don't consume it. Вот еще один способ сделать это.

awk '{ if (NR == 1) { save = $0; prtsw = 1 } 
     else if (prtsw == 1 && 2737778 < $5) { 
       print save 
       print $0 
       prtsw = 0 
      } 
      else { save = $0 } 
    }' abetween.txt 
2

другого подобного awk

awk -v n=2737778 'n<=$NF{if(p) print p; print; exit} {p=$0}' file 

02 Jul 2016 00:12:00 2737775 
02 Jul 2016 00:14:00 2738011 
+0

Спасибо, что помогает. Но проблема заключается в том, что цифры растут, и он сбрасывается через неделю. Так что я боюсь, что будет угловой случай. Можем ли мы проверить, является ли число inbetween вместо проверки <=? –

+1

Это именно то, что делает скрипт, пока файл сортируется. Проверьте угловые шкафы, их два. – karakfa