如何将三列修改为只有其中一列为 0,其余为 1?

如何将三列修改为只有其中一列为 0,其余为 1?

假设我有一个混乱的数据表,如下所示:

Name     IsBuyer IsBidder IsAdmin
person1  1       1        0
person2  1       0        1
person3  1       1        1
.
.

IsBuyer、IsBidder、IsAdmin 这三个列可以为真也可以为假。但其中只有一个列可以为真。

如何使用 sed、awk 或其他基于 UNIX/Linux 的工具编写脚本来修改这样的表?

答案1

假设您有一个名为 eg 的文件users.txt,并且您只想修复它,以便您的应用程序可以启动并允许您检查和解决问题;您只需设置IsBuyer1IsBidderIsAdmin0

awk选择和之间的口味perl

awk 'NR==1; /person/ && $2+$3+$4>1 {print $1 " 1 0 0"}' users.txt

perl -lape 'if (/person/ && $F[1]+$F[2]+$F[3]>1) {$_="$F[0] 1 0 0"}' users.txt

稍微复杂一点的方法是,如果发现为 ,则仅设置IsBuyer为,即将值翻转为 ,但从不将值翻转为。当然,我不知道这在你的情况下是否有意义,因为这取决于发生了哪种数据损坏。1101

相关内容