将两列分开,而不是彼此分开

alp*_*pha 2 awk text-processing csv bc

我有一个由我的脚本生成的 CSV 文件,它获取每个用户使用的 CPU 时间,但是它以秒为单位,我需要以小时为单位,所以我需要将每行除以 3600。

示例输入文件

**USER,TOTAL_CPU,AVERAGE_CPU
user1,1234552.0,1234.3
user2,9999999.0,82772.6
user3,7777776227.9,282882,0**
Run Code Online (Sandbox Code Playgroud)

如果我一次做一列,我可以很容易地得到我想要的:

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

这给了我一次一列的输出。我同时想要两者,必须有更好的方法,而不是先制定一列,然后再制定下一列并将两者合并在一起。我同时想要两者,输出应该与输入完全相同,但不是秒,而是以小时为单位。

示例输出文件:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.342
user2,2777.777,22.992
etc.....
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 6

Awk 解决方案:

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

输出:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.343
user2,2777.778,22.992
user3,2160493.397,78.578,0
Run Code Online (Sandbox Code Playgroud)