以下を示すフィールドで区切られたファイルがあります"|"
。
firstname|secondname|Kernel|Version|Year
たとえば、
Linus|Torvald|VMLINUZ||1994
Jochen|Liedtke|L4|||
Apple||Darwin||2000
"\t"
制限があり、条件がほとんどない結果が必要です。空の列があると置き換えられますが"-"
、名前または2番目の名前が空の場合は状況が複雑になります。私はこのようなことが起こりたくありません。
簡単に言えば、名前と2番目の名前を連結しますが、これらの列のいずれかが空の場合は変更しないでください。"-"
それ以外の場合、この条件は他の空のフィールドに適用されます。
私は次のawkスクリプトを書きましたが、空の名前または2番目の名前も置き換えます"-"
。
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