При ошибке распечатать предыдущую фактическую и следующую запись - PullRequest
0 голосов
/ 13 ноября 2018

В следующем примере, в столбце 2. значения увеличиваются, тогда цель состоит в том, чтобы получить записи, которые не находятся в порядке возрастания, и напечатать (предыдущий - ошибка - следующий)

файл

2343 290232732   
2343 290232738   
2349 290202757   
2342 290232758   
2343 290232813   
2341 291063213   
2343 291043555   
2345 291063609   
2343 291063622   
2343 291063637   
2341 291053637   
2343 291063702   
2343 291063707   
2343 291063712   
2343 291063751

Я пытался

awk '{                                                                                                                               
         if(substr($0,6,9) < prev -1)                                                                                                                        
         {printf ("** ERROR ** %4d --> %4d --> %4d\n",prv2, prev, substr($0,6,9)) } ; prv2 = prev; prev = substr($0,6,9)}'  file

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

Я получил

** ERROR ** 290232732 --> 290232738 --> 290202757
** ERROR ** 290232813 --> 291063213 --> 291043555
** ERROR ** 291063622 --> 291063637 --> 291053637

Желаемый выход

** ERROR ** 290232738 --> 290202757 --> 290232758
** ERROR ** 291063213 --> 291043555 --> 291063609
** ERROR ** 291063637 --> 291053637 --> 291063702

Заранее спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете попробовать это awk:

awk '
  f {                           # if flag print ERROR
    p = p FS "-->" FS $2
    print "** ERROR **" FS p
    split ( p , a )             # keep $2 of previous line in p
    p = a[3]                    # this way if it is in error you can catch it
    f = 0                       # remove flag
  }
  $2 > p {                      # $2 is ok keep it
    p = $2
    next
  }
  {
    p = p FS "-->" FS $2        # $2 is not ok
    f = 1                       # prepare to print
  }
  END {
    if ( f )                    # the last line is in error
      print "** ERROR **" FS p  # print it
  }
' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...