es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando awk para encontrar números en KB, luego cambiarlos y reemplazarlos por GB y mostrar toda la línea.

Tratando de buscar/los números de abajo en KB (Cubrir KB: 7606353,) para que se muestren como (Cubrir GB: 7.25,) He intentado muchas opciones de awk para cambiar los números de abajo de la unidad KB a GB y otras herramientas complicadas que utilizo para enviar las salidas a archivos y luego volver a usarlas, mi objetivo es tener solo un awk que encuentre el número después de (Cubrir KB:) y lo divida entre /1024/1024 y cambie KB a GB .. el máximo esfuerzo que logré fue

awk '($NF == ($NF+0)){printf("%s %6.2f\n",$0,$10/1024/1024)}END{print ""}'

pero eso mostrará el número que necesito al final de la línea mientras que necesitaba reemplazarlo.. Intenté -F para cortar algunas columnas y no obtuve la salida necesaria tampoco.

Fuente:

XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 7606353, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 7268433, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 6895144, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 6506311, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 5590773, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 5192929, OBJETIVO GB: 1048576
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir KB: 4645949, OBJETIVO GB: 1048576

Cambiar a:

XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 7.25, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 6.93, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 6.58, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 6.20, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 5.33, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 4.95, OBJETIVO GB: 1048576   
XX YY ZZ checknpr  Y  checkagain  DEV  Cubrir GB: 4.43, OBJETIVO GB: 1048576
Tags:  

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, puedes usar el siguiente comando awk en una sola línea:

    awk '{gsub(/Cover KB:/,"Cover GB:"); printf "%s %.2f, %s\n", $1, $2/1024/1024, $NF}'

    Explicación:

    • gsub(/Cover KB:/,"Cover GB:"): reemplaza “Cover KB:” por “Cover GB:”
    • printf "%s %.2f, %s\n", $1, $2/1024/1024, $NF: imprime la línea modificada en el formato requerido. Los dos primeros formatos son para los dos primeros campos, el segundo formato convierte KB a GB e imprime el valor calculado con dos puntos decimales, y el tercer formato imprime el último campo tal como está.

    Este comando analizará cada línea del archivo de entrada e imprimirá la línea modificada con valores en GB en el formato deseado.

Comments are closed.