如何在bash中使用awk循环一个字段的多个值?

Luk*_*sCB 3 bash awk

我的数据集如下所示:

lastname|name|hash
A|B|C
D|E|
G|H|I J
Run Code Online (Sandbox Code Playgroud)

我需要awkbash中这种格式的数据(最好带有)。

{C}% B A
{I}% H G
{J}% H G
Run Code Online (Sandbox Code Playgroud)

换句话说:仅当hash我想输出的第三列 ( )有值时。第三列 ( hash) 中可以有 1-n 个值,对于每个值,输出应如下所示:

{hash}% name lastname

tha*_*isp 5

BEGIN { 
    FS="|"
}

NR>1 && NF==3 {
    split($3, a, " ")
    for (i=1;i in a;i++) printf("{%s}%% %s %s\n", a[i], $2, $1)
}
Run Code Online (Sandbox Code Playgroud)

我认为以上awk是不言自明的。要打印文字%printf我们必须使用%%. 测试:

> awk -f tst.awk file
{C}% B A
{I}% H G
{J}% H G
Run Code Online (Sandbox Code Playgroud)