![awk는 0,1,2를 제외한 모든 값을 누락(NA)으로 변경합니다.](https://linux55.com/image/211300/awk%EB%8A%94%200%2C1%2C2%EB%A5%BC%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%93%A0%20%EA%B0%92%EC%9D%84%20%EB%88%84%EB%9D%BD(NA)%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EB%8B%A4..png)
많은 열과 숫자 값 행이 포함된 거대한 파일이 있습니다. 열 값은 모두 숫자이며 그 중 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