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

答え2

$ awk '
    NR>1 {
        for ( i=2; i<=NF; i++ ) {
            if ( $i !~ /^[012]$/ ) {
                $i = "NA"
            }
        }
    }
    { print }
' file | column -t
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

関連情報