正在分析变量字段文件格式的符号分隔文件,格式为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

我想提取第一个和第二个字段,并找到关键字23.1和关键字56.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
}'

是的,awk可以是执行此任务的合适工具。

在GNUawk设置FS多字符的情况下,这里FS="\||="我们得到了所需的输出:

awk -v FS="\||=" '
NR==1{print $1, $2, $7, $9}
NR==2{print $1, $2, $7, $5}
NR==3{print $1, $2, $7}
NR==4{print $1, $2, $9}' OFS="," file
foo10,bar11,12.2,21
foo11,bar21,11,25.45
foo13,bar13,11
foo23,bar34,532

最新更新