将shell输出转换为float64?

时间:2019-07-05 04:05:36

标签: shell go

我正在使用带有golang的外壳来访问apache日志文件并获取一些数据。首先,我曾经将输出直接写到文件中并且可以正常工作,但是现在我需要获取输出并直接在程序中使用它。而且我需要将其转换为float64。我尝试将其转换为字符串,然后转换为float64,但无法正常工作吗?

func Mem_usage_data(j int) (Mem_predict float64, err error) {
    awkPart := fmt.Sprintf("awk '{print $%d/1024}'", j)

    out1, err := exec.Command("bash", "-c", "tail -n 1 /var/log/apache2/access.log| "+awkPart+" ").Output()
    fmt.Println("memory usage is", out1)
    s1 := string(out1)
    v1, err1 := strconv.ParseFloat(s1, 64)
    if err1 != nil {
        fmt.Println(err)
    }
    if err != nil {
        fmt.Println(err)
    }
    return v1, err
}

当我打印出out1时,我得到了类似的信息[48 46 49 50 48 49 49 55 10]。请您帮忙如何在out1中获得准确的输出以及如何将其转换为float64?

1 个答案:

答案 0 :(得分:2)

转换失败可能是因为s1上有一些空格或换行符。进行转换之前,请先尝试修剪它。使用strings.TrimSpace()来实现。

v1, err1 := strconv.ParseFloat(strings.TrimSpace(s1), 64)