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
3 Réponses :
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 code> à la rescousse!
$ 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
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 code> sortie :(
J'ai divisé le fichier en utilisant 00:00:00 code> comme séparateur. Puis appliqué votre solution sa solution maintenant. Merci.
Vérifiez la deuxième version, cela devrait également fonctionner avec plusieurs dates.
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
awk + tri ou p>
Utilisez
DataMash code>
avec songroupby code> et
max code> opérations?