awk - 如果发现出现,则删除每一行
问题描述
我有一个具有这种格式内容的文件:
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 将所有记录散列到并为 fields 中看到的值r[NR]
保留另一个数组。a[$i]
$2,...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
推荐阅读
- javascript - 某些 SVG 路径属性似乎对路径没有影响
- java - Returning from a constructor causes a compile error on lambda parameters: "error: variable might not have been initialized"
- javascript - 使用 Overlapping Marker Spiderfier 时获取地图标记的新位置
- python - 使用 pandas 读取多个文件
- php - How to pass value of a input to other input in paypal button
- javascript - toggleGot 不是函数
- javascript - HTML 化的 API 数据
- c# - 来自 VB6 的 DotNet COM 没有强名称
- javascript - 确保仅通过 AJAX 表单访问页面以进行处理的最佳方法是什么?
- ide - ADICUP360 和 CrossCore Embedded Studio - 错误:“_start() at 0x150”没有可用源