shell – 如何使用awk删除列2和列3匹配的行?

我有一个包含4列的文件

ifile.txt
3  5  2  2
1  4  2  1
4  5  7  2 
5  5  7  1 
0  0  1  1
3  5  7  3
5  4  2  2

我想删除第2列和第2列的行. 3个值与之前的值相同.例如,第2行和第2行第7列和第2列中的值相同. 3.同样第3行和第3行. 4&第6列和第2列中的值相同.所以我想保留第2行并删除第7行.同样保留第3行并删除第4行和第6行.我的输出是:

ofile.txt
3  5  2  2
1  4  2  1
4  5  7  2
0  0  1  1

我试过这个命令

awk '{a[NR]=$2""$3} a[NR]!=a[NR-1]{print}' ifile.txt > ofile.txt

但它没有给出我的欲望输出.

解决方法

$awk '!(($2,$3) in a); {a[$2,$3]}' ifile
3  5  2  2
1  4  2  1
4  5  7  2
0  0  1  1

这个怎么运作

awk一次读取一行输入文件.每个输入行分为字段.在这种情况下,重要字段是第二个,表示为$2,第三个字段表示为$3.

>((2美元,3美元)a)

如果$2,$3不是关联数组a中的键,则此条件为真.由于未指定任何操作,因此当此条件为真时,将执行认操作,即打印该行.

更详细的说,当$2,$3是a的关键时,a中的$($2,$3)为真.但是,我们希望条件恰恰相反.因此,我们将awk的否定运算符!应用于它.
> a [$2,$3]

增加了2美元,3美元作为一个关键.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...