Supongamos que tiene datos con cantidades en formato legible para humanos, como la salida de du -h
, y desea seguir operando con esos números. Digamos que desea canalizar sus datos a través de grep para hacer una suma de un subconjunto de esos datos. Haces esto ad-hoc en muchos sistemas que nunca has visto antes, y solo tienes utilidades mínimas. Desea conversiones de sufijos para todos los sufijos estándar de 10 ^ n.
¿Existe una utilidad gnu-linux para convertir los números con sufijo a números reales dentro de una tubería? ¿Tiene una función bash escrita para hacer esto, o alguna perl que podría ser fácil de recordar, en lugar de una longitud de reemplazos de expresiones regulares o varios pasos 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}'
Referencias relevantes:
/200907/
delante de su código por línea, por ejemploawk '/200907/{s+=$1} END {print s}'
Respuestas:
Basado en mi respuesta a una de las preguntas que vinculó a:
Otro método que se usa:
fuente
sed
comando en mi respuesta, agregaría cláusulas para manejar sufijos SI adicionales como lo muestro en elawk
comando.s/T/ * 1000 G;
agregado al principio agregaría terabytes, por ejemplo.Puede usar expresiones regulares perl para hacer esto. Por ejemplo,
Este es un guión simple. Puedes considerarlo como punto de partida. ¡Espero que ayude!
fuente
Personalmente, simplemente no usaría la bandera -h en primer lugar. La versión "legible para humanos" redondea los números que deberán redondearse nuevamente cuando convierta de nuevo, siendo cada vez menos precisos. (Por ejemplo, 2.7MiB son 2831155.2 bytes. ¿Qué hiciste con el otro 0.8 de un byte?)
De lo contrario, puede solicitar
units
convertir MiB / GiB / KiB a solo "B" y se encargará de esto, pero tendría que hacer algo como (suponiendo que su salida esté tabulada, de lo contrario de maneracut
adecuada)fuente
units
faltaba en mi distribución mínima! Creo que todos haríamos esto de manera diferente si tuviéramos el control total de todo.fuente