避免在某些字段上使用 awk 条件

避免在某些字段上使用 awk 条件

我有"|"分隔文件,其中的字段代表:

firstname|secondname|Kernel|Version|Year

例如:

Linus|Torvald|VMLINUZ||1994
Jochen|Liedtke|L4|||
Apple||Darwin||2000

我想要"\t"带限制的结果,几乎没有条件。如果任何列为空,它将替换为"-",但在少数情况下会变得复杂,其中第一个或第二个名称中的任何一个都为空。我不希望这样的事情发生。

简单地说,连接第一个和第二个名称,但如果这些列中有任何一个为空,则不要替换为,"-"否则此条件适用于其他空字段。

我编写了以下 awk 脚本,但它也替换了空的名字或第二名"-"

BEGIN {
FS="|";
OFS="\t"
}
{ for (i = 1; i <= NF; ++i) sub(/^$/, "-", $i) }
{
print $5, $4, $2" "$1
}

它给出了这个输出:

1994    -   Torvald Linus
-   -   Liedtke Jochen
2000    -   - Apple

所以最后一行应该是

2000    -   Apple

最终输出

1994    -   Torvald Linus
-   -   Liedtke Jochen
2000    -   Apple

答案1

这可能就是您想要做的:

$ cat tst.awk
BEGIN { FS="|"; OFS="\t" }
{
    for (i=3; i<=NF; i++) {
        if ($i == "") {
            $i = "-"
        }
    }
    print $5, $4, ($2=="" ? "" : $2 " ") $1
}

$ awk -f tst.awk file
1994    -       Torvald Linus
-       -       Liedtke Jochen
2000    -       Apple

相关内容