特定のフィールドにawk条件を使用しないでください。

特定のフィールドにawk条件を使用しないでください。

以下を示すフィールドで区切られたファイルがあります"|"

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

おすすめ記事