divide duas colunas, não entre si

2

Eu tenho um arquivo CSV gerado por um script meu, Ele usa o tempo de CPU por usuário, no entanto, ele obtém isso em segundos, eu preciso em horas, então eu preciso dividir cada linha por 3600.

exemplo de arquivo de entrada

**USER,TOTAL_CPU,AVERAGE_CPU
user1,1234552.0,1234.3
user2,9999999.0,82772.6
user3,7777776227.9,282882,0**

Eu consigo facilmente o que eu quero, se eu fizer uma coluna de cada vez com:

for i in 'awk -F , 'NR!=1{print $2}' myfile.out'; do bc -l <<< "scale=3; ($i/3600)"; done

Isso me dá a saída para uma coluna por vez. Eu quero os dois de uma vez, tem que haver uma maneira melhor, em vez de trabalhar uma coluna, depois a próxima e fundir as duas juntas. Eu quero os dois de uma só vez, a saída deve ser exatamente o mesmo que a entrada, mas em vez de segundos, será em horas.

exemplo de arquivo de saída:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.342
user2,2777.777,22.992
etc.....
    
por alpha 08.02.2018 / 10:20

1 resposta

5

Awk solução:

awk 'BEGIN{ FS=OFS="," }
     NR > 1{
         $2 = sprintf("%.3f", $2/3600);
         $3 = sprintf("%.3f", $3/3600)
     }1' file

A saída:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.343
user2,2777.778,22.992
user3,2160493.397,78.578,0
    
por 08.02.2018 / 10:26