首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unix中字符串到整数的转换

unix中字符串到整数的转换
EN

Stack Overflow用户
提问于 2020-12-08 16:04:38
回答 1查看 48关注 0票数 0

我想打印进程id的内存。但是,我在if块中遇到错误,因为它无法检查字符串,因为需要整数。

代码语言:javascript
复制
printf "%-10s%-15s%-15s%s\n" "PID" "OWNER" "MEMORY" "COMMAND"


function sysmon_main(){
RAWIN=$(ps -o  pid,user,%mem,command ax |grep -v PID |awk '/[0-9]*/{print $1 ":" $2 ":" $4}')


for i in $RAWIN
do
     PID=$(echo $i | cut -d: -f1)
     OWNER=$(echo $i| cut -d: -f2)
     COMMAND=$(echo $i| cut -d: -f3)
     MEMORY=$(pmap $PID | tail -n 1| awk '/[0-9]K/{print $2}')

if [ "$MEMORY" -gt 0 ];then

     printf "%-10s%-15s%-15s%s\n" "$PID" "$OWNER" "$MEMORY" "$COMMAND"
fi
done
}

sysmon_main | sort -bnr -k3

我得到了下面的错误

代码语言:javascript
复制
./sysmon: line 17: [: 0K: integer expression expected
./sysmon: line 17: [: 126704K: integer expression expected
./sysmon: line 17: [: 14216K: integer expression expected
./sysmon: line 17: [: 48187132K: integer expression expected
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 16:29:46

您可以使用以下脚本:

代码语言:javascript
复制
while read -r pid owner m cmd; do
   if [[ $pid =~ ^[0-9]+$ && $cmd != "ps -o"* ]]; then
      mem="$(pmap $pid | awk 'END {print $NF+0}')"
      ((mem > 0)) && printf "%-10s%-15s%-15s%s\n" "$pid" "$owner" "$mem" "$cmd"
   fi
done < <(ps -o  pid,user,%mem,command ax)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65195213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档