gpt4 book ai didi

linux - 如何控制 AWK 更改哪些输出字段分隔符,哪些不更改

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:16 25 4
gpt4 key购买 nike

我有前 5 个 CPU 使用此命令的进程:

ps -eo pcpu,pmem,pid,ppid,cmd | sort -k 1,1nr | head -5

输出:

 0.2  0.0  5037     1 /sbin/hpHelper -I0
0.1 0.0 5567 1 cmahostd -p 15 -s OK -l /var/log/hp-snmp-agents/cma.log
0.1 0.0 5839 1 cmanicd
0.0 0.0 10 1 [watchdog/2]
0.0 0.0 10689 1 cmasm2d -p 30 -l /var/log/hp-snmp-agents/cma.log

字段是CPU%,MEMORY%,PID,PPID,COMMAND

我希望输出在每行的开头用逗号分隔,时间戳。但是,最后一个 command 字段不应以逗号分隔。我正在使用以下内容:

ps -eo pcpu,pmem,pid,ppid,cmd | sort -k 1,1nr | head -5 | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1; print $0}'

这给了我一个输出:

2016,05,22,00,26,19,0.2,0.0,5037,1,/sbin/hpHelper,-I0
2016,05,22,00,26,19,0.1,0.0,5567,1,cmahostd,-p,15,-s,OK,-l,/var/log/hp-snmp-agents/cma.log
2016,05,22,00,26,19,0.1,0.0,5839,1,cmanicd
2016,05,22,00,26,19,0.0,0.0,10,1,[watchdog/2]
2016,05,22,00,26,19,0.0,0.0,10689,1,cmasm2d,-p,30,-l,/var/log/hp-snmp-agents/cma.log

而我期待的输出:

2016,05,22,00,26,19,0.2,0.0,5037,1,/sbin/hpHelper -I0
2016,05,22,00,26,19,0.1,0.0,5567,1,cmahostd -p 15 -s OK -l /var/log/hp-snmp-agents/cma.log
2016,05,22,00,26,19,0.1,0.0,5839,1,cmanicd
2016,05,22,00,26,19,0.0,0.0,10,1,[watchdog/2]
2016,05,22,00,26,19,0.0,0.0,10689,1,cmasm2d -p 30 -l /var/log/hp-snmp-agents/cma.log

如何修改脚本来实现?

最佳答案

我的想法是将输出分成两部分,第一部分用作为分隔符,最后一部分用空格分隔。

完整代码如下

ps -eo pcpu,pmem,pid,ppid,cmd | sort -k 1,1nr | head -5 | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1;  a="" ; b = ""; for (i =1; i<=4; ++i) a=a$i","; for (j = 5; j <= NF; j++) b = b " "$j; print a b; }'

只有awk部分的代码

awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1;  a="" ; b = ""; for (i =1; i<=4; ++i) a=a$i","; for (j = 5; j <= NF; j++) b = b " "$j; print a b; }'

关于linux - 如何控制 AWK 更改哪些输出字段分隔符,哪些不更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com