0
votes

Obtenez une valeur maximale d'une colonne dans un horodatage fixe

J'ai un fichier avec horodatage et données dans 12 colonnes. Ces données sont larguées chaque seconde et je dois choisir la valeur max de la 6ème colonne dans chaque minute. Je ne suis même pas sûr de commencer. Je pensais faire comme suit, mais ne savez pas comment obtenir un groupe hors minute. De plus, si si les données sont plus ouvertes de 24 heures. alors ne peut pas utiliser cette approche. Je pense que je pense que j'ai besoin de créer un groupe de 60 lignes, puis de trier les données, mais je ne sais pas comment faire ça.

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


1 commentaires

Utilisez DataMash avec son groupby et max opérations?


3 Réponses :


3
votes

awk code> à la rescousse! xxx pré>

Notez que max n'est pas initialisé (implicitement initialisé à zéro), si les valeurs sont toutes négatives, cela ne va pas fonctionner . La solution de contournement est simple mais peut-être pas nécessaire dans ce contexte. P>

Cette alternative assume l'heure triée des enregistrements et imprime le MAX en une minute, des dates différentes ne seront pas fusionnées. P>

$ 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


7 commentaires

Est-ce que cela déforme le tri? J'ai 48h + Data et Timeestamp sont tous cognés.


Oui, il dépasse les enregistrements basés sur le hachage de tableau, vous devez trier les résultats en fonction du premier champ. Une autre alternative est d'imprimer le maximum après chaque changement de minute, peut-être qu'il convient mieux.


Dans ce cas, j'aurai deux 16:00:00 pour la journée 1 et une autre pour la journée2


Droite, mais si vous n'avez pas le champ de date, vous avez déjà des ennuis.


son mpstat sortie :(


J'ai divisé le fichier en utilisant 00:00:00 comme séparateur. Puis appliqué votre solution sa solution maintenant. Merci.


Vérifiez la deuxième version, cela devrait également fonctionner avec plusieurs dates.



0
votes

Utilisation de Perl

$ 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 commentaires

0
votes

awk + tri xxx

ou xxx


0 commentaires