2014-12-05 56 views
2

我有这是越来越使用的运行时间和AWK的平均负载,例如击弦替换命令结果

LOAD_5M=$(uptime | awk -F'load averages:' '{ print $2}' | awk '{print $2}') 

然而,这包括一个简单的bash脚本“”在平均负载

的端部

eg

0.51, 

所以我一直然后用字符串逗号替换像这样:

LOAD_5M=${LOAD_5M/,/} 

我不是一个awk或bash wizzkid因此,虽然这给了我我想要的结果,我想知道如果有写这个的简洁的方式,或者通过:

  • 使用awk来获得无逗号的平均负载,或
  • 剥单节锂逗号ne

回答

2

你可以做到这一点在同一个awk命令:

uptime | awk -F 'load averages?: *' '{split($2, a, ",? "); print a[2]}' 
1.32 
+0

我注意到一些OS包含逗号每个平均和一些不这样做,这不工作,如果它不在那里,但如果我改变拆分“分裂($ 2,一,”,?“)'我认为它看起来不错。 – 3urdoch 2014-12-05 10:52:46

+0

是的,我在OSX上测试过,在这里找到了逗号。否则是'分裂($ 2,a,“,?”)'会更好。 – anubhava 2014-12-05 10:54:17

1

5分钟负载可在/proc/loadavg。你可以简单地使用cut

cut -d' ' -f2 /proc/loadavg 

随着awk可以发出:

awk '{print $2}' /proc/loadavg 

如果您没有在Linux上工作的文件/proc/loadavg将不存在。在这种情况下,我会建议使用sed,像这样:

uptime | sed 's/.*, \(.*\),.*,.*/\1/' 
+1

我喜欢这个,直到我在Mac上试过并得到'cut:/ proc/loadavg:没有这样的文件或目录,所以认为正常运行时间多一点。 – 3urdoch 2014-12-05 10:45:02

+0

同样在这里,我也试过它在Mac上,它没有工作。也许它是Linux的绝招 – anubhava 2014-12-05 10:46:19

+1

@murdoch使用Linux的另一个原因。 ;) – hek2mgl 2014-12-05 23:23:38

0
uptime | awk -F'load average:' '{ print $2}' | awk -F, '{print $2}' 
0.38 

(我的正常运行时间,输出具有“平均负载:”奇)

0

平均负载数字总是在“正常运行时间”的输出,以便在最后3个字段:

IFS=' ,' read -a uptime_fields <<<"$(uptime)" 
LOAD_5M=${uptime_fields[@]: -2:1}