【Shell案例】【取指定列的方式$5 p[6],双括号运算、awk、管道运算】8、统计所有进程占用内存大小的和
假设 nowcoder.txt 内容如下:
root 2 0.0 0.0 0 0 ? S 9月25 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 9月25 0:00 [kworker/0:0H]
web 1638 1.8 1.8 6311352 612400 ? Sl 10月16 21:52 test
web 1639 2.0 1.8 6311352 612401 ? Sl 10月16 21:52 test
tangmiao-pc 5336 0.0 1.4 9100240 238544 ?? S 3:09下午 0:31.70 /Applications
以上内容是通过ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt文件下面的
请你写一个脚本计算一下所有进程占用内存大小的和:
方法1:for循环+累加
思路:
取某一列的值,并通过变量的方式累加
确定哪一列是内存占用大小:USER PID %CPU %MEM
确定如何取某一个内容 $3
如何转为整形
定义累加变量let sum=0
#!/bin/bash sum=0 # 每一行寻找第几列的值USER PID %CPU %MEM,即第i行的第3列 # 利用awk直接得到第6个元素的内容 for i in `awk '{print $6}' nowcoder.txt` # 并不是真的打印,而是把值传递给i do ((sum+=$i)) done echo $sum
方法2:while循环
#!/bin/bash sum=0 while read p do arr=($p) ((sum+=arr[5])) done < nowcoder.txt echo $sum
方法3:awk实现结果计算
#!/bin/bash awk 'BEGIN{sum=0}{sum+=$6}END{print sum}' nowcoder.txt
或直接省略BEGIN初始化操作
#!/bin/bash awk '{sum+=$6}END{print sum}' nowcoder.txt
方法4:while循环和awk结合
#!/bin/bash sum=0 while read p do # 管道与awk结合 ((sum+=$(echo $p|awk '{print $6}'))) done < nowcoder.txt echo $sum
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/16217029.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-05-02 牛客面经