假设我有一个混乱的数据表,如下所示:
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
,并且您只想修复它,以便您的应用程序可以启动并允许您检查和解决问题;您只需设置IsBuyer
为1
和IsBidder
和IsAdmin
到0
。
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
为,即将值翻转为 ,但从不将值翻转为。当然,我不知道这在你的情况下是否有意义,因为这取决于发生了哪种数据损坏。1
1
0
1