#!/bin/bash # 设置采集间隔(秒) INTERVAL=1 # 输出文件 OUTPUT="metrics.csv" echo "timestamp,temperature(°C),fps,cpu_freq(MHz)" > $OUTPUT while true; do # 获取时间戳 TS=$(date +%s) # 温度数据(需确认thermal_zone编号) TEMP=$(adb shell "cat /sys/class/thermal/thermal_zone0/temp" | awk '{print $1/1000}') # FPS计算(需根据具体设备调整) FRAMES=$(adb shell dumpsys SurfaceFlinger --latency | wc -l) FPS=$(( (FRAMES - 1) / 3 )) # 根据输出格式调整计算 # CPU平均频率 FREQ=$(adb shell "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq" | awk '{sum+=$1} END {print sum/NR/1000}') # 写入CSV echo "$TS,$TEMP,$FPS,$FREQ" >> $OUTPUT sleep $INTERVAL done 将此脚本中的时间戳转换为时间,cpu平均频率改为每个cpu的频率
时间: 2025-07-13 14:25:50 浏览: 13
<think>好的,用户的问题是关于如何修改Bash脚本,将时间戳转换为可读的时间格式,并分别记录每个CPU的核心频率,而不是整体平均值。我需要分步骤思考如何解决这两个问题。
首先,时间戳转换。原来的脚本可能使用了`date +%s`来获取时间戳,也就是自纪元以来的秒数。用户希望将其转换为可读的格式,比如“YYYY-MM-DD HH:MM:SS”。这时候应该使用`date`命令的格式化选项,例如`date "+%Y-%m-%d %H:%M:%S"`。在脚本中,可能需要替换原来的时间戳获取方式,或者将已有的时间戳变量用`date -d @时间戳`来转换。需要确认原脚本中时间戳是如何生成和记录的,然后调整格式。
接下来是CPU频率的问题。用户希望每个CPU核心的频率都被记录,而不是平均值。通常,Linux系统中每个CPU的频率信息可以在`/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq`中找到,其中X是CPU编号。例如,cpu0、cpu1等。需要编写一个循环,遍历所有存在的CPU核心,读取各自的频率,并输出。可能需要先检测系统中有多少个CPU核心,可以使用`nproc`命令或者检查`/sys/devices/system/cpu/`目录下的cpu*目录数量。然后,用循环逐个读取每个核心的频率,并用逗号分隔或其他方式记录下来。
然后需要整合这两个修改到现有的脚本中。可能需要替换原来获取时间戳和CPU频率的部分。比如,原来的脚本可能有类似`date +%s`和`cat /proc/cpuinfo | grep MHz | awk '{sum+=$4} END {print sum/NR}'`这样的命令来获取平均值。现在需要分别处理每个CPU的频率。
另外,用户提到了引用中的内容,比如引用[3]中的sed和awk命令。可能原脚本在处理输出时使用了类似的方法来提取特定行,因此在修改时需要注意保持其他部分的功能不变,只调整时间戳和CPU频率的部分。
还需要考虑如何高效地获取每个CPU的频率。使用`/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq`路径可能更直接,可以通过循环遍历这些文件。例如,使用`for cpu in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq; do ...`来逐个读取每个CPU的频率值,然后处理单位转换(比如从kHz转换为GHz)。
最后,测试修改后的脚本,确保时间戳正确转换,每个CPU的频率都被正确记录,并且脚本的其他功能不受影响。可能还需要处理异常情况,比如某些CPU核心可能不可用或者权限问题,但用户的问题中没有提到这些,暂时可以假设权限没问题。
总结步骤:
1. 修改时间戳获取命令,使用可读格式。
2. 遍历每个CPU核心,读取各自的当前频率。
3. 将读取的频率整合到脚本的输出中,替换原来的平均值。
4. 确保脚本的其他部分(如进程信息等)保持原样。
5. 测试修改后的脚本,验证正确性。</think>要将Bash脚本中的时间戳转换为可读格式,并记录每个CPU核心的频率,可按以下步骤操作:
---
### 一、时间戳转换
**原代码可能包含**:
```bash
timestamp=$(date +%s)
```
**修改为**:
```bash
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
```
或对已有时间戳变量转换:
```bash
readable_time=$(date -d "@$timestamp" "+%F %T")
```
---
### 二、获取每个CPU核心频率
#### 1. **遍历所有CPU核心**
```bash
cpu_freqs=()
for cpu in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq; do
freq=$(awk '{printf "%.2f GHz", $1/1000000}' $cpu)
cpu_freqs+=("$freq")
done
freq_str=$(IFS=,; echo "${cpu_freqs[*]}")
```
#### 2. **替换原平均值代码**
假设原代码通过`grep MHz /proc/cpuinfo`计算平均值,需替换为上述遍历逻辑。
---
### 三、整合示例脚本
修改后的脚本片段:
```bash
#!/bin/bash
timestamp=$(date "+%Y-%m-%d %H:%M:%S") # 可读时间戳
# 获取各CPU核心频率
cpu_freqs=()
for cpu in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq; do
freq=$(awk '{printf "%.2f GHz", $1/1000000}' $cpu)
cpu_freqs+=("$freq")
done
freq_str=$(IFS=,; echo "${cpu_freqs[*]}")
# 输出结果
echo "时间: $timestamp | CPU频率: $freq_str"
```
---
### 四、验证与扩展
1. **权限检查**:确保脚本有权限读取`/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq`[^2]
2. **兼容性**:部分系统可能需安装`cpufrequtils`工具
3. **性能优化**:若CPU核心过多,可改用`parallel`加速遍历
---
阅读全文
相关推荐




















