Awk 将秒转换为毫秒

Awk 将秒转换为毫秒,awk,Awk,文件:File.txt 代码取自 试试看 执行时:awk-f try.awk file.txt 预期产出: RAM: 2342 2000 149 输出: RAM: 2 2000 149 请帮助修复上述代码以将s转换为ms,这是当值混合为s和ms时我面临的问题。假设您的输入文件始终与显示的示例相同,请尝试以下内容 awk ' /RAM:/{ sub(/^\+/,"",$2) num=split($2,array,"[s|ms]") if($2 ~ /[0-9]+s[0-9]+ms|

文件:File.txt

代码取自

试试看

执行时:awk-f try.awk file.txt

预期产出:

RAM: 2342 2000 149
输出:

RAM: 2 2000 149

请帮助修复上述代码以将s转换为ms,这是当值混合为s和ms时我面临的问题。

假设您的输入文件始终与显示的示例相同,请尝试以下内容

awk '
/RAM:/{
  sub(/^\+/,"",$2)
  num=split($2,array,"[s|ms]")
  if($2 ~ /[0-9]+s[0-9]+ms|[0-9]+s$/){
     print array[1] * 1000 + array[2]
  }
  else{
     print array[1]
  }
  num=""
}
'   Input_file
在ms捕捉分支中,您假设只有毫秒。您可以做的一件事是使用正则表达式在一次过程中捕获两个可选组,并计算它们的时间:

/:/ {
    match($2, /\+(([0-9]+)s)?(([0-9]+)ms)?/, arr)
    ms_time = arr[2]*1000 + arr[4] + 0
    vals[$1]=vals[$1] OFS ms_time
}

END {
     for (key in vals)
         print key vals[key]
}

在这里,行条件已被简化,时间捕获逻辑已被放入表达式中,您还需要解析该行,因此在不同表达式中分离所有大小写没有任何好处。

您好,欢迎使用堆栈溢出。看看它如何解释这样的转换。看看你对这个问题的所有问题,我不知道输出来自哪里,但是你是否认为你也可能有分钟、小时甚至几天的输出?你现在问的问题和你以前问的完全一样。这叫做复制品!我知道你试图建立一个工具,你每天都在发现不同的问题。这看起来也很像一个问题,也许你应该问一个问题来描述你的全部问题,我们也许能够帮助你从开始到结束。此外,看看,我之前提到的问题都没有得到答案。他们是否没有满足您的要求或缺少什么?我已经编辑了我的问题答案,以考虑到这一点!你忘了结尾部分。总数应打印在同一行上。实际上,这对问题中详述的第一个file.txt文件不起作用
awk '
/RAM:/{
  sub(/^\+/,"",$2)
  num=split($2,array,"[s|ms]")
  if($2 ~ /[0-9]+s[0-9]+ms|[0-9]+s$/){
     print array[1] * 1000 + array[2]
  }
  else{
     print array[1]
  }
  num=""
}
'   Input_file
/:/ {
    match($2, /\+(([0-9]+)s)?(([0-9]+)ms)?/, arr)
    ms_time = arr[2]*1000 + arr[4] + 0
    vals[$1]=vals[$1] OFS ms_time
}

END {
     for (key in vals)
         print key vals[key]
}