首页 > 解决方案 > 使用变量字段文件格式解析符号分隔文件,格式为 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

解决方案


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
    }'

推荐阅读