gpt4 book ai didi

awk - 删除找到的每一行

转载 作者:行者123 更新时间:2023-12-01 09:09:52 25 4
gpt4 key购买 nike

我有一个具有这种格式内容的文件:

1  6  8
1 6 9
1 12 20
1 6
2 8
2 9
2 12
2 20
2 35

如果在下一行中找到数字(来自第 2 列或第 3 列,而不是来自第 1 列),我想删除所有行,无论它是在第 2 列还是第 3 列,包括找到初始数字的行。

我应该将其作为输出:

2 35

我试过使用:

awk '{for(i=2;i<=NF;i++){if($i in a){next};a[$i]}} 1' 

但是好像不行。

怎么了?

最佳答案

一次性 awk 将所有记录散列到 r[NR] 并为字段 $2 中看到的值保留另一个数组 a[$i] ,...NF.

awk ' {
for(i=2;i<=NF;i++) # iterate fields starting from the second
if($i in a) { # if field value was seen before
delete r[a[$i]] # delete related record
a[$i]="" # clear a
f=1 # flag up
} else { # if it was not seen before
a[$i]=NR # add record number to a
r[NR]=$0
}
if(f!=1) # if flag was not raised
r[NR]=$0 # store record on record number
else # if it was raised
f="" # flag down
}
END {
for(i=1;i<=NR;++i)
if(i in r)
print r[i] # output remaining
}' file

输出:

2  35

关于awk - 删除找到的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com