从命令开始
ps -eo user,pcpu,pid,args | sort -rnk 3 | head -30
对于拥有最多进程并消耗 CPU 使用率的用户,如何将此命令的输出解析为 csv 文件?有什么建议
答案1
您可以使用磨坊主,然后运行
ps -eo user,pcpu | mlr --n2c --repifs -N cat | mlr --csv stats1 -f "%CPU" -a count,sum -g USER
得到这样的东西
用户 | %CPU_count | %CPU_sum |
---|---|---|
根 | 8 | 0.000000 |
用户名 | 8 | 0.200000 |
mysql | 1 | 0.000000 |
www-数据 | 5 | 0.000000 |
答案2
ps -eo user,pmem,pcpu,pid,args --no-headers | sort -rnk 3,3 | head -n30 | awk '{ print $1 "," $3 "," $5 }'
添加了该--no-headers
选项ps
,因为否则标题行有时会出现在输出中。这假设任何输出字段中永远不会有逗号,因此 CSV 转义逻辑是不必要的。如果您确实需要 CSV 转义逻辑,您可能应该用 Python 或其他语言编写并使用该模块; CSV 转义逻辑很痛苦。
答案3
这可能对你有用:
ps -eo user,pmem,pcpu,pid,args | sort -rnk 3 | head -30 | awk '{OFS=","; print $1,$3,$5}'
这在您编辑之前回答了您的第一个问题
答案4
也许有点脏但有效:
ps -eo user,pmem,pcpu,pid,args --no-headers | sort -rnk 3,3 | head -n 30 | awk '{ print $1 "," $3 "," $5 " " $6 " " $7 " " $8 " " $9 " " $10 " " $11 " " $12 " " $13}'