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

あなたが望みTitleVariableラインがそのまま残っているとします。

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

または、ファイルの最初の3行を変更せずにそのまま維持する必要がある場合:

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

関連情報