使用 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

或者,如果文件中的前三行应保持不变:

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

相关内容