awk - 如何使用 awk 格式化程序的输出,转换第一列但保持其余部分不变?
问题描述
我需要格式化的输出,go tool cover
以便我可以拆分第一列,/
所以我只得到最后两个值,但将其余输出保留为原始值。
以下是原始输出的样子:
$ go tool cover -func=coverage.out
github.com/company/utils/common.go:6: IsFoo 100.0%
github.com/company/utils/logger.go:118: maskFoo 100.0%
github.com/company/utils/logger.go:127: createFoo 100.0%
github.com/company/utils/logger.go:132: CreateFakeFoo 100.0%
github.com/company/utils/foo_validaiton.go:43: IsFoo 100.0%
github.com/company/utils/foo_validaiton.go:49: GreaterThanFoo 100.0%
github.com/company/utils/yaml.go:39: closeFOO 100.0%
total: (statements) 100.0%
我尝试使用 awk 拆分第一列并仅获取utils/file.go
部分,但列未对齐。
$ go tool cover -func=coverage.out | awk '{split($1, a, "/"); print a[4]"/"a[5]"\t"$2"\t"$3}'
utils/common.go:6: IsFoo 100.0%
utils/logger.go:118: maskFoo 100.0%
utils/logger.go:127: createFoo 100.0%
utils/logger.go:132: CreateFakeFoo 100.0%
utils/foo_validaiton.go:43: IsFoo 100.0%
utils/foo_validaiton.go:49: GreaterThanFoo 100.0%
utils/yaml.go:39: closeFOO 100.0%
/ (statements) 100.0%
如何使用 awk 或其他 cli 工具归档以下输出?
utils/common.go:6: IsFoo 100.0%
utils/logger.go:118: maskFoo 100.0%
utils/logger.go:127: createFoo 100.0%
utils/logger.go:132: CreateFakeFoo 100.0%
utils/foo_validaiton.go:43: IsFoo 100.0%
utils/foo_validaiton.go:49: GreaterThanFoo 100.0%
utils/yaml.go:39: closeFOO 100.0%
total: (statements) 100.0%
解决方案
如果您想将最后 2 个值与/
第一列分开,您可以使用模式在最后一次出现正斜杠之前和之后匹配 1 个或多个字符,然后再次将该匹配设置为第 1 列的值。
从输入加载示例数据file
:
awk 'match($1, /[^\/]+\/[^\/]+$/) {
$1 = substr($1, RSTART, RLENGTH)
}1' file | column -t
输出
utils/common.go:6: IsFoo 100.0%
utils/logger.go:118: maskFoo 100.0%
utils/logger.go:127: createFoo 100.0%
utils/logger.go:132: CreateFakeFoo 100.0%
utils/foo_validaiton.go:43: IsFoo 100.0%
utils/foo_validaiton.go:49: GreaterThanFoo 100.0%
utils/yaml.go:39: closeFOO 100.0%
total: (statements) 100.0%
命令将是:
go tool cover -func=coverage.out | awk 'match($1, /[^\/]+\/[^\/]+$/){$1=substr($1,RSTART,RLENGTH)}1' | column -t
如果您想让模式更具体,请以冒号之间的数字结尾:118:
,例如:
/[^\/]+\/[^\/]+:[0-9]+:$/
推荐阅读
- python-3.x - 我可以编写一个有效的函数来做到这一点吗?
- facebook - 如何在分享我的主页 URL 时告诉 Facebook 和 Twitter 显示我的主页图像?
- python - 通过集合中的订单号检索 mongodb 文档
- java - 如何在 Java/Kotlin 中以特定真实目录中的根目录创建虚拟文件系统?
- exception - What happens when a exception occurs in exception block
- azure - 使用 Golang 从 Azure Blob 存储下载文件时,得到“ curl Empty reply from server”,但文件是在后台下载的
- c++ - -fno-unwind-tables 和 -fno-asynchronous-unwind-tables 不起作用 NDK clang++
- python - Sagemaker API 列出超参数
- javascript - 为什么我的 switch 语句中没有增量来更改大小写?
- c# - 解决相同命名空间中的定义冲突