awk は、0,1,2 を除くすべての値を欠落 (NA) に変更します。

awk は、0,1,2 を除くすべての値を欠落 (NA) に変更します。

多くの列と数値の行を含む巨大なファイルがあります。列の値はすべて数値で、その98%は[0または1および2]です。ただし、場合によっては、1.733336など、0、1、2を超えています0.4567777。 0,1,2を除くすべての値をNAに置き換えたいです。 awkでこれを行うことはできますか?私の入力ファイルは次のとおりですが、その後にはたくさんの列があります。

id  A_101   A_102   A_103
20971530    1   0   0   0
31457209    0   2   0   0
31405731    0.45663 0   0   2
40194308    0   0   0   1.7655

ベストアンサー1

awk '
    BEGIN { ok[1]; ok[2]; ok["0"]; ok["NA"] }
    NR > 1 {
        for (i=2; i <= NF; i++)
            if (!($i in ok))
                sub($i "[[:blank:]]*", "NA  ")
    }
    {print}
'
id  A_101   A_102   A_103
20971530    1   0   0   0
31457209    0   2   0   0
31405731    NA  0   0   2
40194308    0   0   0   NA

おすすめ記事