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

bash – 比较awk中的连续行和多列,并随机选择一个重复行

发布时间:2020-12-15 22:39:19 所属栏目:安全 来源:网络整理
导读:我读了这个问题: Compare consecutive rows in awk/(or python) and random select one of duplicate lines. 现在我还有一些问题: 如果我不仅要对x值进行比较,还要对y值或更多列进行比较,我应该如何更改代码? 也许是这样的 if ($1 != prev) ($2 != prev)
我读了这个问题: Compare consecutive rows in awk/(or python) and random select one of duplicate lines.
现在我还有一些问题:
如果我不仅要对x值进行比较,还要对y值或更多列进行比较,我应该如何更改代码?
也许是这样的

if ($1 != prev) && ($2 != prev)  ???

换句话说:我想比较当前行的x值和y值是否与下一个连续行的x值和y值相同.

数据:

#x   y     z
1    1    11        
10   10   12       
10   10   17       
4    4    14
20   20   15        
20   88   16     
20   99   17
20   20   22
5    5    19
10   10   20

输出应如下所示:

#x   y     z
1    1    11        
10   10   17       
4    4    14
20   20   15        
20   88   16        
20   99   17    
20   20   22    
5    5    19
10   10   20

或(由于随机选择)

#x   y     z
1    1    11        
10   10   12       
4    4    14
20   20   15        
20   88   16        
20   99   17    
20   20   22    
5    5    19
10   10   20

来自上述链接的代码,用于处理x值的内容,但不用于AND条件中的y值:

$cat tst.awk
function prtBuf(        idx) {
    if (cnt > 0) {
        idx = int((rand() * cnt) + 1)
        print buf[idx]
    }
    cnt = 0
}

BEGIN { srand() }
$1 != prev { prtBuf() }
{ buf[++cnt]=$0; prev=$1 }
END { prtBuf() }

解决方法

这应该这样做:

function prtBuf(idx) {
    if (cnt > 0) {
        idx = int((rand() * cnt) + 1)
        print buf[idx]
    }
    cnt = 0
}

BEGIN { srand() }
$1 != prev1 || $2 != prev2 { prtBuf() }
{ buf[++cnt]=$0; prev1=$1; prev2=$2 }
END { prtBuf() }

(编辑:李大同)

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

    推荐文章
      热点阅读