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

관련 정보