我有"|"
分隔文件,其中的字段代表:
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