두 열을 분리하되 서로 분리하지는 않음

두 열을 분리하되 서로 분리하지는 않음

각 사용자가 사용하는 CPU 시간을 가져오는 스크립트로 생성된 CSV 파일이 있지만 이 파일은 몇 초 안에 가져오고 몇 시간 안에 필요하므로 각 행을 3600으로 나누어야 합니다.

입력 파일 예

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

한 번에 한 열씩 수행하면 원하는 것을 쉽게 얻을 수 있습니다.

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

이번에는 하나의 출력 열이 제공됩니다. 나는 둘 다 원하며 하나의 열을 만들고 다음 열을 만든 다음 두 개를 병합하는 것보다 더 좋은 방법이 있어야 합니다. 나는 두 가지를 동시에 원합니다. 출력은 입력과 똑같아야 하지만 몇 초가 아니라 몇 시간이 걸립니다.

예제 출력 파일:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.342
user2,2777.777,22.992
etc.....

답변1

Awk해결책:

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

산출:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.343
user2,2777.778,22.992
user3,2160493.397,78.578,0

관련 정보