AWK를 사용하여 숫자를 0 또는 1로 변환

AWK를 사용하여 숫자를 0 또는 1로 변환

이것은 아마도 간단한 질문일지 모르지만 평생 동안 그것을 알아낼 수는 없습니다. 다음과 같은 파일이 있습니다 keyout.dat.

Title
1
Variable
-999
-999
0.234
0.123
-999
-999
0.555

파일은 500,000줄 동안 이와 같이 계속됩니다.

-999모든 것을 0으로 설정하고 다른 모든 것을 1로 설정하여 새 파일을 만들고 싶습니다 . 분명 간단한 명령이지만 다른 파일로 인쇄할 수는 없습니다.

어떤 도움이라도 좋을 것입니다.

답변1

비교 자체는 0 또는 1을 반환하므로 직접 인쇄할 수 있습니다.

awk '{print $1!=-999;}' file > another_file

숫자가 아닌 행을 유지하려면 다음을 수행하십시오.

awk '$1!=$1+0 {print $1;next;} {print $1!=-999;}' file > another_file

답변2

당신이 원 Title하고 Variable라인이 그대로 유지된다고 가정합니다.

awk '!/Title/&&!/Variable/ { $0 = ($1 != -999) }; 1' keyout.dat

또는 파일의 처음 세 줄을 변경하지 않고 그대로 유지해야 하는 경우:

awk 'NR > 3 { $0 = ($1 != -999) }; 1' keyout.dat

답변3

그리고 awk:

awk '{$0=($0=="-999")?0:1};1' file

또는 다음을 사용할 수 있습니다 sed.

sed -e '/^-999$/s/.*/0/' -e '//!s/.*/1/' file

관련 정보