Chinaunix

标题: shell脚本有乱码,求教 [打印本页]

作者: 好看的附件    时间: 2010-07-07 10:16
标题: shell脚本有乱码,求教
各位大虾,

      我抓取top命令中的输出值,其中有两个值分别放到2个变量中,查看两个变量显示为:62940,681632
         但是当我除法运算报错,fatal: division by zero attempted  。 我把这两个变量输出到文件中查看发现,
      文件中显示有乱码,^[[m^O^[[m^O62940,^[[m^O^[[m^O681632 ,请问如何能把这个乱码去掉啊,不是空格。。
作者: Shell_HAT    时间: 2010-07-07 10:18
把你的代码贴出来看看?
作者: 好看的附件    时间: 2010-07-07 10:21
`top -n 1|grep "Mem:"|sed -e 's/  *//g'`
作者: 好看的附件    时间: 2010-07-07 10:23
这是放到2个变量中
total=`echo ${mem#*':'}|awk -F',' '{print $1}'|awk -Fk '{print $1}'`
used=`echo ${mem#*':'}|awk -F',' '{print $2}'|awk -Fk '{print $1}'`

echo "$total,$used"
作者: Shell_HAT    时间: 2010-07-07 10:23
除法在哪里?咋不肯贴全呢?
作者: 好看的附件    时间: 2010-07-07 10:26
echo "$used,$total"|awk -F, 'END{printf("%.2f",$1/$2)}'

问题应该不是除法的问题,因为我把那两个变量值换为具体值就正确
作者: 好看的附件    时间: 2010-07-07 10:27
运行top -n 1|grep "Mem:"抓取出来的内容为:
Mem:   255264k av,  129684k used,  125580k free,       0k shrd,   21824k buff
作者: blacknew    时间: 2010-07-07 10:29
没Linux环境,应该是top里面的控制字符,为了显示出粗体或者高亮等效果。
可以试试 top -b -n 1
或者输出时用 col -b 过滤下
作者: 好看的附件    时间: 2010-07-07 10:32
我运行那个显示

[root@localhost shell]#top -b -n 1
'dumb': unknown terminal type.
作者: lkk2003rty    时间: 2010-07-07 10:32
感觉应该是top 时候没有加-b从而导致重定向的文件乱码的问题
2楼上  黑哥马甲?
作者: 好看的附件    时间: 2010-07-07 10:44
在显示的时候我在过滤多个空格的时候,过滤不掉,可以匹配上,很奇怪,我把空格用.过滤
过滤前:
Mem:    681632k total,    44828k used,   636804k free,     2892k buffers
过滤后:
[root@localhost shell]# top -n 1|grep "Mem:"|sed 's/[[:space:]][[:space:]]*/./g'
Mem:..681632k.total,.44224k.used,.637408k.free,.2824k.buffers
其中Mem:后面有两个连续的.
作者: blacknew    时间: 2010-07-07 10:50
回复 11# 好看的附件


这样试试:

top -n 1| col -b | grep ...
作者: lkk2003rty    时间: 2010-07-07 10:50
  1. top -b -n 1|grep "Mem:"|sed 's/[[:space:]][[:space:]]*/./g'
复制代码

作者: 好看的附件    时间: 2010-07-07 10:57
回复 12# blacknew


    不行呀,没有col命令。。。
作者: blackold    时间: 2010-07-07 10:58
是控制字符。

你看到的是不真实的。
作者: 好看的附件    时间: 2010-07-07 10:59
回复 15# blackold


    那有办法过滤吗?因为机器上有好多命令都没有。
作者: blacknew    时间: 2010-07-07 11:05
回复 16# 好看的附件


这样试试:

top -n 1 | awk '/Mem:/{printf "total:%d\tused:%d\n",$3,$5}'
作者: 好看的附件    时间: 2010-07-07 11:10
回复 17# blacknew


    恩,这样可以,万分感谢。看来得多学习了,感谢上面帮助的人
作者: 好看的附件    时间: 2010-07-07 11:19
回复 17# blacknew


    大哥,你真是太厉害了,我写了半天,你直接一句话就行了。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2