Найти максимальное количество одновременных событий - PullRequest
1 голос
/ 16 ноября 2010

Я бы хотел напечатать максимальное количество одновременных событий с учетом времени начала и окончания каждого события в формате "ччмм" (пример ввода ниже)

$ cat input.txt  
1030,1100 
1032,1100
1032,1033 
1033,1050 
1034,1054
1039,1043 
1040,1300

Для этого я бы

  • Сортировка по времени начала (столбец 1)
  • Используйте awk / sed, чтобы перебрать все значения в столбце 2 (то есть время окончания), чтобы найти число конечных времен, предшествующих этому событию, которые больше текущего значения (то есть найти все текущие события). Чтобы уточнить, предполагая, что строка 3 обрабатывается awk ... Время ее окончания 10:33. Время окончания двух предыдущих событий - 11:00 и 11:00. Поскольку оба эти значения больше 10:33 (т. Е. Они все еще работают в 10:33), третий столбец (т. Е. Число одновременных заданий) будет содержать 2 для этой строки

Ожидаемый вывод сценария awk для поиска одновременных событий для этого ввода будет

0
1
2
2
2
4
0 
  • Найдите максимальное значение этого третьего столбца.

Мой awk в лучшем случае рудиментарен, и мне трудно реализовать шаг 2. Я хотел бы, чтобы это был чистый сценарий, не прибегая к тяжелому языку, как Java. Следовательно, любая помощь от гуру awk будет высоко оценена. Любые лайнеры не-awk linux one также приветствуются.

1 Ответ

0 голосов
/ 16 ноября 2010
BEGIN  {FS="\,"; i=0}

{ superpos=0;
    for (j=1; j<=i; j++ ){
      if($2 < a[j,2])
          ++superpos
     }
      a[++i,1]=$1;
      a[i,2]=$2;
      print superpos;
      a[i,3]=superpos;
}
END{ max=0; 
        for (j=1; j<=i; j++ ){ 
          if ( a[j,3]>max)
            max= a[j,3];
     }
     print "max = ",max;
 }

работает на ideone

НТН!

Выход:

0
0
2
2
2
4
0
max =  4

Редактировать

Или более хитрый, если вы предпочитаете:

BEGIN  {FS="\,"; max=0 }
{ 
    b=0; 
    for (var in a){
      if($2 < a[var]) b++;
    }  
      a[NR]=$2;
      print b;
      if (b > max) max = b;
}
END { print "max = ", max }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...