/usr/bin/sn_core.elf getstat 2>/dev/null指令打印出来的是 Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:20946 lock:1 wr1 -> lnk:1 rx:0 tx:0 lock:1 temp: 45.000 C Time: Fri, Mar 24, 2023, 02:20:10 +606379680 nanoseconds. 根据指令打印出来的值 如何将我想要的值放到数组中
时间: 2024-03-08 18:49:19 浏览: 19
您可以使用shell脚本将指令输出的内容存储到一个变量中,然后使用字符串处理的方式提取所需的值,并将其存储到数组中。以下是一个示例脚本,可根据您的实际需求进行修改:
```
#!/bin/bash
# 执行指令并将输出存储到变量中
output=$(/usr/bin/sn_core.elf getstat 2>/dev/null)
# 使用字符串处理提取所需的值
temp=$(echo "$output" |grep -oP 'temp:\s+\K[\d.]+')
time=$(echo "$output" |grep -oP 'Time:\s+\K.*')
# 将所需的值存储到数组中
values=("$temp" "$time")
# 输出数组中的值
echo "${values[0]}"
echo "${values[1]}"
```
该脚本中,首先执行指令并将输出存储到变量 `output` 中。然后使用 `grep` 命令和正则表达式提取温度值和时间值,并将它们存储到数组 `values` 中。最后输出数组中的值。
相关问题
/usr/bin/sn_core.elf getstat 2>/dev/null该指令打印出来的是Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:5496 lock:1 wr1 -> lnk:1 rx:7690 tx:2196 lock:1 syncs:wr1 sv:1 ss:'TRACK_PHASE' aux:0 sec:2284 nsec:105818016 mu:867144 dms:422759 dtxm:238106 drxm:197332 dtxs:241345 drxs:178945 asym:21626 crtt:11416 cko:-2 setp:13003 hd:57678 md:31716 ad:65000 ucnt:2045 temp: 46.812 C 用该代码char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null"; char line[MAX_LINE_LENGTH]; char *mode_str, *mu_str,*dms_str,*crtt_str; if((mode_str = strstr(line,"mode : ")) != NULL){ mode_str += strlen("mode : "); } if(!mode_str){ printf("WR mode not fount\n"); exit(1); } printf("%s\n",line); 打印line的值是Status:WR mode : WRC_SLAVE_WR1 后面的内容没有打印出来这是为什么
在你的代码中,你没有实际执行 `/usr/bin/sn_core.elf getstat 2>/dev/null` 这个命令,也没有将命令输出的结果存储到 `line` 变量中。你需要使用 `popen()` 函数来执行命令并将输出存储到缓冲区中,然后再从缓冲区中读取数据并将其存储到 `line` 变量中。你可以尝试修改你的代码如下:
```
char command[] = "/usr/bin/sn_core.elf getstat 2>/dev/null";
char line[MAX_LINE_LENGTH];
char *mode_str, *mu_str, *dms_str, *crtt_str;
FILE *fp;
fp = popen(command, "r");
if (fp == NULL) {
printf("Failed to execute command\n");
exit(1);
}
fgets(line, MAX_LINE_LENGTH, fp);
pclose(fp);
if ((mode_str = strstr(line, "mode : ")) != NULL) {
mode_str += strlen("mode : ");
} else {
printf("WR mode not found\n");
exit(1);
}
printf("%s\n", line);
```
这个修改后的代码会执行 `"/usr/bin/sn_core.elf getstat 2>/dev/null"` 命令,并将输出存储到 `fp` 变量中。然后,它会使用 `fgets()` 函数从缓冲区中读取一行数据,并将其存储到 `line` 变量中。最后,它会关闭缓冲区并打印 `line` 变量的值。
用c实现/usr/bin/sn_core.elf getstat打印出来的是 Status:WR mode : WRC_SLAVE_WR1 wr0 -> lnk:0 rx:0 tx:27153 lock:1 wr1 -> lnk:1 rx:0 tx:0 lock:1 temp: 44.875 C Time: Fri, Mar 24, 2023, 03:01:36 +407237376 nanoseconds. 将temp 和 Time的值放到数组中
好的,我理解了你的问题。首先,需要解析 `/usr/bin/sn_core.elf getstat` 命令的输出,提取出其中的 `temp` 和 `Time` 的值,然后将它们存储到数组中。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1024
int main() {
char command[] = "/usr/bin/sn_core.elf getstat"; // 执行的命令
char line[MAX_LINE_LENGTH]; // 用于存储命令输出的每行内容
char *temp_str, *time_str; // 用于存储解析出的温度和时间的字符串
float temp; // 存储解析出的温度的值
char time[MAX_LINE_LENGTH]; // 存储解析出的时间的字符串
int time_ns; // 存储解析出的时间的纳秒值
char *token; // strtok 函数的返回值
int i = 0; // 存储已经存储了多少个元素到数组中
char *array[2]; // 存储解析出的温度和时间的数组
// 执行命令并逐行读取输出
FILE *fp = popen(command, "r");
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
// 解析温度
if ((temp_str = strstr(line, "temp: ")) != NULL) {
temp_str += strlen("temp: ");
temp = strtof(temp_str, NULL);
}
// 解析时间
if ((time_str = strstr(line, "Time: ")) != NULL) {
time_str += strlen("Time: ");
strncpy(time, time_str, MAX_LINE_LENGTH);
time[strlen(time) - 1] = '\0'; // 去掉行末的换行符
// 解析纳秒值
token = strtok(time, " +");
while (token != NULL) {
if (strchr(token, 'n') != NULL) {
time_ns = strtol(token, NULL, 10);
break;
}
token = strtok(NULL, " +");
}
}
}
pclose(fp);
// 将解析出的温度和时间存储到数组中
array[i++] = malloc(sizeof(float));
memcpy(array[i - 1], &temp, sizeof(float));
array[i++] = malloc(sizeof(char) * MAX_LINE_LENGTH);
strcpy(array[i - 1], time);
// 打印数组内容
for (int j = 0; j < i; j++) {
if (j == 0) {
printf("温度:%f\n", *((float *)array[j]));
} else {
printf("时间:%s\n", array[j]);
}
free(array[j]);
}
return 0;
}
```
这段代码首先执行 `/usr/bin/sn_core.elf getstat` 命令,并逐行读取其输出。当解析到 `temp` 或 `Time` 时,提取出对应的字符串,并解析出温度和时间的值。然后将这些值存储到数组中,并打印出来。需要注意的是,由于温度是一个浮点数,而数组只能存储同类型的数据,所以需要使用 `memcpy` 函数将其存储到数组中。同时,由于 `strtok` 函数会修改原始字符串,因此需要先将时间字符串复制到另一个数组中。
希望能够帮到你!