我的数据按以下排序顺序排列(这里数据按照第一个 v1,然后是 v2,然后是 v3,然后是 v4 排序):
v1=1 v2=8513481 v3=119330184 v4=0
v1=1 v2=8521383 v3=119330182 v4=0
v1=1 v2=10630231 v3=60529116 v4=18
v1=1 v2=60528877 v3=60529221 v4=17
v1=1 v2=90351079 v3=90351078 v4=20
v1=1 v2=271669588 v3=271669683 v4=101
v1=2 v2=8513481 v3=10583646 v4=0
v1=2 v2=10175437 v3=10175436 v4=0
v1=2 v2=10630231 v3=60528947 v4=17
v1=2 v2=10630231 v3=60529119 v4=18
v1=2 v2=10630232 v3=605291191 v4=18
现在我想找出 2 行中 v1 和 v2 相等的行。即在上面给出的数据中我想找到以下形式的行:
v1=2 v2=10630231 v3=60528947 v4=17
v1=2 v2=10630231 v3=60529119 v4=18
我知道如何在 python 中通过比较连续的行以及每当有匹配的输出行时执行此操作。有没有一种简单的方法可以使用 sed 等 Linux 命令来执行相同的操作。我知道如何使用 sed 在给定两个值时查找单词,但我不知道如何在这种情况下使用 sed。非常感谢一些解释。
会更容易一些awk
:
awk '{
lines[$1,$2]=(lines[$1,$2]?lines[$1,$2] RS $0:$0)
dups[$1,$2]++
}
END {
for(line in lines)
if(dups[line]>1) print lines[line]
}' file
v1=2 v2=10630231 v3=60528947 v4=17
v1=2 v2=10630231 v3=60529119 v4=18
- 我们创建两个数组。
lines
and dups
.
- 当第一列和第二列出现多次时,我们会增加计数。我们用
dups
为此数组。
- In our
lines
数组,我们检查是否存储了具有相同第一列和第二列的行。如果有,我们将重复的行附加到它上面。
- In the
END
我们迭代的块lines
大批。如果第一个和列在我们的dups
数组,我们打印行。
或者,如果您不想将整个文件保留在内存中,您可以执行以下操作(因为您声明数据已排序):
awk '($1==c1 && $2==c2){print line RS $0}{line=$0;c1=$1;c2=$2}' file
- 我们分配变量
line
作为您当前的整个行,c1
作为第 1 列和c2
如第 2 栏。
- 如果当前行的第 1 列和第 2 列与前一列和第二列相同,则打印上一行和当前行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)