#!/bin/bash [ $# -ne 1 ] && exit 1 jstack $1 >/tmp/jstack.log for cpu_tid in `ps -mp $1 -o THREAD,tid,time|sort -k2nr| sed -n '2,15p' |awk '{print$2"_"$(NF-1)}'`;do cpu=`echo $cpu_tid | cut -d_ -f1` tid=`echo $cpu_tid | cut -d_ -f2` xtid=`printf "%x " $tid` echo -e "33[31m========================$xtid $cpu%33[0m" cat /tmp/jstack.log | sed -n -e "/0x$xtid/,/^$/ p" #cat /tmp/jstack.log | grep "$xtid" -A15 done rm /tmp/jstack.log
下面这个是新脚本
#!/bin/bash [ $# -ne 1 ] && exit 1 jstack $1 >/tmp/jstack.log top -H -p $1 -b -n1 | grep PID -A10 | grep -v PID | awk '{print$1,$9}' >/tmp/topH.log cat /tmp/topH.log | while read tid cpu;do xtid=`printf "%x " $tid` echo -e "33[31m========================$xtid $cpu%33[0m" cat /tmp/jstack.log | sed -n -e "/0x$xtid/,/^$/ p" done
.echo 具有给输出的字符加颜色的功能,格式如下:
格式: echo -e "33[字背景颜色;字体颜色;ANSI控制码m字符串33[0m"
-e选项是让echo能够识别转义字符,否则不能显示颜色,先上个格式相关的例子
例1:
echo -e "33[41;36m something here 33[0m"
或者:echo -e "33[36;41m something here 33[0m"
输出结果一样:
其中41的位置代表底色为红色, 36的位置是代表字的颜色为深绿色(在底色为红色下看不出来),41和36的位置交换也没有关系。
例2:
或者:echo -e "33[41;36;1m something here 33[0m"
或者:echo -e "33[36;41;1m something here 33[0m"
输出结果:
该格式加了“1m”参数,表示“设置高亮度”,从图中可以看出亮度不同,例1和例2格式的结尾都有“0m”,表示“关闭所有属性”,如果不设置0m,那么接下来的输出都会延续上个输出属性。
2.参数及对应的颜色
字背景颜色 | 字颜色 | ANSI控制码的说明 |
40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 |
30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 |
033[0m 关闭所有属性 33[1m 设置高亮度 33[4m 下划线 33[5m 闪烁 33[7m 反显 33[8m 消隐 33[30m -- 33[37m 设置前景色 33[40m -- 33[47m 设置背景色 33[nA 光标上移n行 33[nB 光标下移n行 33[nC 光标右移n行 33[nD 光标左移n行 33[y;xH设置光标位置 33[2J 清屏 33[K 清除从光标到行尾的内容 33[s 保存光标位置 33[u 恢复光标位置 33[?25l 隐藏光标 33[?25h 显示光标 |