gpt4 book ai didi

shell - 在 awk 中按特定顺序打印文件

转载 作者:行者123 更新时间:2023-12-01 08:22:50 25 4
gpt4 key购买 nike

我正在关注此链接 https://stackoverflow.com/a/54599800/10220825

文件.txt

Iteration 1
RAM: +2s
Cache: +142ms (total +417ms)

Iteration 2
RAM: +184ms
Cache: +172ms
Searchms: +131ms (total +385ms)

Iteration 3
RAM: +149ms
Searchms: +3.2s

我想删除ms or s从时间值而不是从名称(例如,不应将 Searchms 删除到搜索)。我还想转换s into ms通过multiply into 1000如果时间值包含 s并相应地打印结果。

预期输出:

RAM: 2000 184 149
Cache: 142 172
Searchms: 131 3200

尝试.awk

/:/{vals[$1]=vals[$1] OFS $2+0}
END {
for (key in vals)
print key vals[key]
}

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

代码输出:

Cache: 142 172
Searchms: 131 3.2
RAM: 2 184 149

在我的输出中s is not converting to ms.请建议我如何修改上面的源代码 try.awk将 s 转换为 ms。


新测试用例:文件.txt

Iteration 1
RAM: +2s342ms

Iteration 2
RAM: +2s

Iteration 3
RAM: +149ms

代码:

/:/ && $2 ~/ms$/{vals[$1]=vals[$1] OFS $2+0;next}
/:/ && $2 ~/[^m]s$/{vals[$1]=vals[$1] OFS ($2+0)*1000}
END {
for (key in vals)
print key vals[key]
}

预期输出:

RAM: 2342 2000 149

输出:

RAM: 2 2000 149

最佳答案

您可以使用以下awk脚本:

/:/ && $2 ~/ms$/{vals[$1]=vals[$1] OFS $2+0;next}
/:/ && $2 ~/[^m]s$/{vals[$1]=vals[$1] OFS ($2+0)*1000}
END {
for (key in vals)
print key vals[key]
}

这将产生输出:

awk -f try.awk file.txt 
Cache: 142 172
Searchms: 131 3200
RAM: 2000 184 149

说明:

  • 条件 $2 ~/ms$/ 将检查是否有包含 ms 的行,在这种情况下,执行与之前相同的逻辑,然后 下一个 将强制 awk 跳转到下一行。
  • /:/&& $2 ~/[^m]s$/{vals[$1]=vals[$1] OFS ($2+0)*1​​000} 当我们达到这个范围时我们知道我们有一行单位为 s 的行,我们将其乘以 1000 将其转换为 ms

为了满足您的新要求,我已将 try.awk 改编为:

/:/ && $2 ~/[0-9]+s[0-9]+ms$/{split($2,buff,/s/);vals[$1]=vals[$1] OFS (buff[1]+0)*1000+buff[2];next}
/:/ && $2 ~/ms$/{vals[$1]=vals[$1] OFS $2+0;next}
/:/ && $2 ~/[^m]s$/{vals[$1]=vals[$1] OFS ($2+0)*1000}
END {
for (key in vals)
print key vals[key]
}

输入:

$ cat file2.txt 
Iteration 1
RAM: +2s342ms

Iteration 2
RAM: +2s

Iteration 3
RAM: +149ms

输出:

$ awk -f try.awk file2.txt 
RAM: 2342 2000 149

关于shell - 在 awk 中按特定顺序打印文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com