Supposons que vous ayez des données avec des quantités dans un format lisible par l'homme, comme la sortie de du -h
, et que vous souhaitiez continuer à travailler sur ces nombres. Supposons que vous souhaitiez diriger vos données via grep pour faire la somme d'un sous-ensemble de ces données. Vous effectuez cette opération de manière ponctuelle sur de nombreux systèmes que vous n'avez jamais vus auparavant et ne disposez que d'un minimum d'utilitaires. Vous voulez des conversions de suffixes pour tous les 10 ^ n suffixes standard.
Existe-t-il un utilitaire gnu-linux pour convertir les nombres suffixés en nombres réels dans un pipeline? Avez-vous une fonction bash écrite pour faire cela, ou une perl qui pourrait être facile à retenir, au lieu d'une longueur de remplacements de regex ou de plusieurs étapes sed?
38M /var/crazyface/courses/200909-90147
2.7M /var/crazyface/courses/200909-90157
1.1M /var/crazyface/courses/200909-90159
385M /var/crazyface/courses/200909-90161
1.3M /var/crazyface/courses/200909-90169
376M /var/crazyface/courses/200907-90171
8.0K /var/crazyface/courses/200907-90173
668K /var/crazyface/courses/200907-90175
564M /var/crazyface/courses/200907-90178
4.0K /var/crazyface/courses/200907-90179
| grep 200907 | <amazing suffix conversion> | awk '{s+=$1} END {print s}'
Références pertinentes:
/200907/
devant votre code par ligne, par exempleawk '/200907/{s+=$1} END {print s}'
Réponses:
Sur la base de ma réponse à l'une des questions que vous avez liées à:
Une autre méthode utilisée:
la source
sed
commande dans ma réponse, vous ajouteriez des clauses pour gérer des suffixes SI supplémentaires comme je le montre dans laawk
commande.s/T/ * 1000 G;
ajouté au début ajouterait des téraoctets, par exemple.Vous pouvez utiliser des expressions régulières perl pour ce faire. Par exemple,
Ceci est un script simple. Vous pouvez le considérer comme point de départ. J'espère que cela vous aidera!
la source
Personnellement, je n'utiliserais pas le drapeau -h en premier lieu. La version "lisible par l'homme" arrondit les nombres qui devront être arrondis à nouveau lors de la reconversion, devenant encore moins précis. (Par exemple, 2,7 Mo correspond à 2831155,2 octets. Qu'avez-vous fait avec l'autre 0,8ème d'octet ??!)
Sinon, vous pouvez demander
units
de convertir MiB / GiB / KiB en "B" et il s'en occupera, mais vous devrez faire quelque chose comme (en supposant que votre sortie est tabulée, sinon decut
manière appropriée)la source
units
manquant sur ma distribution minimale! Je pense que nous ferions tous différemment si nous avions le contrôle total de tout.la source