我有一个巨大的文件,其中有许多列和行的数值。列的值都是数字,98% 是 [0 或 1 和 2];然而对于某些来说,这些超出了 0,1 和 2,例如1.733336
或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