awk - 使用变量字段文件格式解析符号分隔文件,格式为 key=value 的变量字段
问题描述
我有一个包含以下格式记录的文件:
foo10|bar11|baz15|key1.1=10|key23.1=12.2|key56.2=21|key876.2=242
foo11|bar21|baz34|key56.2=25.45|key1.1=11|key23.1=11.2|key56.2=21|key876.2=242
foo13|bar13|baz16|key591=123|key1.1=11|key23.1=12.2|key876.2=242
foo23|bar34|baz16|key591=123|key23.1=1232.2|key56.2=532
我想提取第一个和第二个字段,并找到 key23.1 和 key56.2。键的长度是可变的,可以是任何顺序,可以存在也可以不存在。
有了这个,我会得到类似的东西:
foo10,bar11,12.2,21
foo11,bar21,11,25.45
foo13,bar13,11,
foo23,bar34,,532
因为这在某种程度上是两个级别(比如我们有一个 | 分隔的记录,然后一些记录有keyX.Y=
,所以 awk 是这个任务的正确工具吗?
解决方案
awk -F'|' -v OFS=, '
{
key23 = key56 = ""
for (i = 3; i <= NF; ++i)
if ($i ~ /^key23\.1=/)
key23 = substr($i, 9)
else if ($i ~ /^key56\.2=/)
key56 = substr($i, 9)
print $1, $2, key23, key56
}'
推荐阅读
- gradle - 在 Gradle 中,api 配置暴露了依赖关系,而实现却没有,这到底意味着什么?
- c# - .net core COM 与 Excel 范围
- r - 使用字符串向量在 R 中循环自定义 ifelse 函数
- firebase - Google Firebase 的计划政策是“每个帐户”还是“每个项目”?
- r - 如何将此列表转换为每行都是单个实体的数据框
- c# - 在指定文化和源时区的同时将“Kind-less”日期时间转换为世界时间
- javascript - 多次调用函数但丢失过去的数据
- office365 - SysWow64 中的 ActiveX 控件不适用于 Excel
- flutter - 如何将唯一 ID 或密钥分配给 SwitchListTile 并在颤动移动应用程序的 onChanged 中检索/获取其值
- javascript - 如何在 JavaScript 中为特定列表加下划线