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() } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |