получить значение MAx столбца с фиксированной отметкой времени - PullRequest
0 голосов
/ 03 января 2019

У меня есть файл с отметкой времени и данными в 12 столбцах.Эти данные сбрасываются каждую секунду, и мне нужно выбрать максимальное значение 6-го столбца в каждую минуту.Я даже не уверен, с чего начать. Я думал о том, чтобы поступить следующим образом, но не знаю, как получить одну из минутной группы.И что делать, если данные более 24 часов.поэтому не может использовать этот подход.Я думаю, что каким-то образом мне нужно создать группу из 60 строк, а затем отсортировать данные из нее, но я не уверен, как это сделать.

cat file |sort -k6  -r |awk '!a[$1]++' |sort -k1  

Например: входные данные

16:06:00       0    1.01    0.00    4.04    1.00    0.00    0.00    0.00    0.00    0.00   94.95
16:06:01       0    0.00    0.00    2.00    2.00    0.00    0.00    0.00    0.00    0.00   98.00
16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:06:03       0    4.08    1.02    2.04    2.00    0.00    0.00    0.00    0.00    0.00   92.86
...
...
16:06:59       0    4.08    1.02    2.04    3.00    0.00    0.00    0.00    0.00    0.00   92.86
16:07:00       0    1.01    0.00    4.04    4.00    0.00    0.00    0.00    0.00    0.00   94.95
16:07:01       0    0.00    0.00    2.00    5.00    0.00    0.00    0.00    0.00    0.00   98.00
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:03       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86
...
...
16:07:59       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86
...
...

Ожидаемый результат:

16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Использование Perl

$ cat monk.log
16:06:00       0    1.01    0.00    4.04    1.00    0.00    0.00    0.00    0.00    0.00   94.95
16:06:01       0    0.00    0.00    2.00    2.00    0.00    0.00    0.00    0.00    0.00   98.00
16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:06:03       0    4.08    1.02    2.04    2.00    0.00    0.00    0.00    0.00    0.00   92.86
16:06:59       0    4.08    1.02    2.04    3.00    0.00    0.00    0.00    0.00    0.00   92.86
16:07:00       0    1.01    0.00    4.04    4.00    0.00    0.00    0.00    0.00    0.00   94.95
16:07:01       0    0.00    0.00    2.00    5.00    0.00    0.00    0.00    0.00    0.00   98.00
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:03       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86
16:07:59       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86


$ perl -F'/\s+/' -lane '  $F[0]=~/(.*):/ and $x=$1 ; if( $F[5]>$kv{$x} ) { $kv{$x}=$F[5]; $kv2{$x}=$_ } END { print "$kv2{$_}" for(keys %kv) } ' monk.log
16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91

или

$ perl -F'/\s+/' -lane '  $F[0]=~/(.*):/ ; if( $F[5]>$kv{$1} ) { $kv{$1}=$F[5]; $kv2{$1}=$_ } END { print "$kv2{$_}" for(keys %kv) } ' monk.log
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91
16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
0 голосов
/ 04 января 2019

awk + sort

$ cat monk.log
16:06:00       0    1.01    0.00    4.04    1.00    0.00    0.00    0.00    0.00    0.00   94.95
16:06:01       0    0.00    0.00    2.00    2.00    0.00    0.00    0.00    0.00    0.00   98.00
16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:06:03       0    4.08    1.02    2.04    2.00    0.00    0.00    0.00    0.00    0.00   92.86
16:06:59       0    4.08    1.02    2.04    3.00    0.00    0.00    0.00    0.00    0.00   92.86
16:07:00       0    1.01    0.00    4.04    4.00    0.00    0.00    0.00    0.00    0.00   94.95
16:07:01       0    0.00    0.00    2.00    5.00    0.00    0.00    0.00    0.00    0.00   98.00
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:03       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86
16:07:59       0    4.08    1.02    2.04    0.00    0.00    0.00    0.00    0.00    0.00   92.86

$ awk ' { split($1,t,":"); $(NF+1)=t[1]t[2] }1 ' monk.log | sort -k12 -n -k6  | awk ' !a[$NF] { a[$NF]++ ; NF--; print} '
16:06:02 0 3.03 0.00 6.06 5.00 0.00 0.00 0.00 0.00 0.00 90.91
16:07:02 0 3.03 0.00 6.06 9.00 0.00 0.00 0.00 0.00 0.00 90.91

или

$ awk ' split($1,t,":") && $(NF+1)=t[1]t[2] ' monk.log | sort -k12 -n -k6  | awk ' !a[$NF] { a[$NF]++ ; NF--; print} '
16:06:02 0 3.03 0.00 6.06 5.00 0.00 0.00 0.00 0.00 0.00 90.91
16:07:02 0 3.03 0.00 6.06 9.00 0.00 0.00 0.00 0.00 0.00 90.91
0 голосов
/ 03 января 2019

awk на помощь!

$ awk '        {split($1,a,":"); k=a[1]a[2]} 
     max[k]<$6 {max[k]=$6; maxR[k]=$0} 
     END       {for(r in maxR) print maxR[r]}' file

16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91

обратите внимание, что max не инициализируется (неявно инициализируется на ноль), если все значения отрицательны, это не сработает.Обходной путь прост, но, возможно, не нужен в этом контексте.

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

$ awk      '{split($1,a,":"); k=a[1]a[2]} 
     max<$6 {max=$6; maxR=$0} 
     p!=k   {if(p) print maxR; p=k} 
     END    {print maxR}' file 

16:06:02       0    3.03    0.00    6.06    5.00    0.00    0.00    0.00    0.00    0.00   90.91
16:07:02       0    3.03    0.00    6.06    9.00    0.00    0.00    0.00    0.00    0.00   90.91
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...