我读了这个问题: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() }
答案 0 :(得分:2)
这应该这样做:
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() }