多くの列と数値の行を含む巨大なファイルがあります。列の値はすべて数値で、その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