linux 下的${i%%.*}

本文介绍了Shell脚本中使用变量截取的技巧,通过具体示例展示了如何利用${i%%.*}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看大佬写的流程,发现这个用法也用的多,自己实践了下它的用法,才知道是什么意思

i=sftr.realgn.bam
echo ${i%%.*}
sftr


n=123,234,68
echo ${n%%,*}
123

原来是提取第一个.前面的内容

<think>我们有两个常见的命令可以获取CPU使用率:`top`和`mpstat`。下面分别给出从这两个命令的输出中提取CPU使用率的sed命令(或结合awk)。 ### 1. 从`top`命令输出中提取总CPU使用率 通常,我们可以使用`top -b -n1`(非交互式,运行一次)来获取CPU信息。输出中有一行如: ``` %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ``` 我们想要提取总的CPU使用率(即非空闲的百分比)。注意,空闲时间在第四个字段(id)。因此,我们可以计算:100% - 空闲百分比。 使用sed和awk组合: ```bash top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}' ``` 解释: - `grep "Cpu(s)"`:找到包含CPU信息的那一行。 - `sed 's/.*, *\([0-9.]*\)%* id.*/\1/'`:匹配到空闲百分比(id前面的数字),并替换为这个数字(即捕获组中的内容)。 - `awk '{print 100 - $1}'`:用100减去这个空闲百分比,得到使用率。 ### 2. 从`mpstat`命令输出中提取总CPU使用率 `mpstat`是sysstat包中的工具,可以更详细地报告CPU使用情况。运行`mpstat 1 1`(采样1次,间隔1秒)的输出: ``` Linux 5.4.0-91-generic (hostname) 12/12/2022 _x86_64_ (4 CPU) 12:00:00 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 12:00:01 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 ``` 我们关注最后一行(第一次采样)的最后一列(%idle),然后计算100 - %idle。 使用命令: ```bash mpstat 1 1 | grep -A1 "%idle" | tail -1 | awk '{print 100 - $NF}' ``` 解释: - `grep -A1 "%idle"`:找到包含%idle的行以及下一行(即数据行)。 - `tail -1`:取最后一行(即数据行)。 - `awk '{print 100 - $NF}'`:用100减去最后一个字段($NF代表最后一个字段)的值,即得到使用率。 ### 3. 提取每个核心的CPU使用率 如果希望分别获取每个核心的CPU使用率,我们可以使用`mpstat`并指定`-P ALL`选项: ```bash mpstat -P ALL 1 1 ``` 输出: ``` Linux 5.4.0-91-generic (hostname) 12/12/2022 _x86_64_ (4 CPU) 12:00:00 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 12:00:01 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 12:00:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 12:00:01 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 12:00:01 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 12:00:01 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 ``` 我们可以用以下命令提取每个核心(包括all)的idle值,然后计算使用率: ```bash mpstat -P ALL 1 1 | grep -v "CPU" | grep -v "^$" | tail -n +3 | awk '{print "CPU" $2 ": " 100 - $NF "%"}' ``` 输出示例: ``` CPU all: 0% CPU 0: 0% CPU 1: 0% CPU 2: 0% CPU 3: 0% ``` ### 4. 使用`/proc/stat`获取每个核心的CPU使用率 另一种方法是直接解析`/proc/stat`文件。该文件的第一行是总的CPU使用情况,接下来的行是每个核心的。我们可以通过计算两次采样之间的差值来得到使用率。 这里提供一个计算每个核心使用率的脚本片段(需要两次采样): ```bash # 第一次采样 grep 'cpu' /proc/stat | head -n 4 > /tmp/cpu_prev # 等待1秒 sleep 1 # 第二次采样 grep 'cpu' /proc/stat | head -n 4 > /tmp/cpu_curr # 计算每个核心(包括总的)的使用率 for i in {0..3}; do prev_line=$(grep "cpu${i}" /tmp/cpu_prev) curr_line=$(grep "cpu${i}" /tmp/cpu_curr) prev_idle=$(echo $prev_line | awk '{print $5}') curr_idle=$(echo $curr_line | awk '{print $5}') prev_total=$(echo $prev_line | awk '{sum=0; for (i=2; i<=NF; i++) sum+=$i; print sum}') curr_total=$(echo $curr_line | awk '{sum=0; for (i=2; i<=NF; i++) sum+=$i; print sum}') diff_idle=$((curr_idle - prev_idle)) diff_total=$((curr_total - prev_total)) usage=$(( (100 * (diff_total - diff_idle) ) / diff_total )) echo "CPU$i: $usage%" done ``` ### 总结 - 对于总CPU使用率,使用`top`或`mpstat`都可以,但`mpstat`更精确。 - 对于每个核心的使用率,推荐使用`mpstat -P ALL`或解析`/proc/stat`。 §§相关问题§§ 1. 如何监控CPU每个核心的温度? 2. 如何实时监控CPU使用率? 3. 如何计算CPU使用率的平均值和峰值?</think>### 提取CPU使用率的命令方法 #### 1. 从 `top` 命令输出提取总CPU使用率 ```bash top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}' ``` - **解释**: - `top -bn1`:非交互式运行一次top命令 - `grep "Cpu(s)"`:过滤包含CPU信息的行 - `sed` 命令提取空闲百分比(idle) - `awk` 计算使用率:$100 - \text{idle}$ #### 2. 从 `mpstat` 命令输出提取总CPU使用率 ```bash mpstat 1 1 | awk 'END{print 100 - $NF}' ``` - **解释**: - `mpstat 1 1`:采样1次,间隔1秒 - `awk 'END{print 100 - $NF}'`:取最后一行最后一列(空闲率),计算$100 - \text{idle}$ #### 3. 提取每个核心的CPU使用率(使用 `mpstat`) ```bash mpstat -P ALL 1 1 | awk '/^[0-9]/{print "CPU"$2": "100-$NF"%"}' ``` 输出示例: ``` CPU0: 12.5% CPU1: 8.3% CPU2: 15.2% ... ``` #### 4. 提取每个核心的CPU使用率(使用 `/proc/stat`) ```bash grep -E '^cpu[0-9]' /proc/stat | awk '{ total = $2+$3+$4+$5+$6+$7+$8+$9+$10; used = total - $5; # $5是空闲时间 printf "CPU%s: %.1f%%\n", substr($1,4), (used/total)*100 }' ``` ### 关键技巧说明 1. **`top` 命令处理**: - 使用 `-b` 批处理模式避免交互 - 正则匹配空闲率:`id.*` 匹配空闲时间字段 - 计算使用率:$ \text{使用率} = 100\% - \text{空闲率} $ 2. **`mpstat` 优势**: - 直接输出结构化数据 - `-P ALL` 显示所有核心 - `$NF` 直接获取最后一列(空闲率) 3. **`/proc/stat` 原理**: - 包含CPU时间计数器 - 计算总时间:$ \text{total} = \text{user} + \text{nice} + \text{system} + \text{idle} + \text{iowait} + \text{irq} + \text{softirq} + \text{steal} $ - 使用率公式:$ \text{usage} = \left(1 - \frac{\text{idle}}{\text{total}}\right) \times 100\% $ ### 完整示例脚本 ```bash #!/bin/bash # 获取总CPU使用率 total_cpu=$(top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}') # 获取每个核心使用率 per_core=$(mpstat -P ALL 1 1 | awk '/^[0-9]/{print "CPU"$2":"100-$NF"%;"}') echo "总CPU使用率: ${total_cpu}%" echo "各核心使用率: ${per_core}" ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值