加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:03:54 所属栏目:安全 来源:网络整理
导读:我有一个包含4列的文件: ifile.txt3 5 2 21 4 2 14 5 7 2 5 5 7 1 0 0 1 13 5 7 35 4 2 2 我想删除第2列和第2列的行. 3个值与之前的值相同.例如,第2行和第2行第7列和第2列中的值相同. 3.同样第3行和第3行. 4第6列和第2列中的值相同.所以我想保留第2行并删除
我有一个包含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美元作为一个关键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读