linux 中实现根据特定列的重复项提取数据

 

001、

(base) root@PC1:/home/test3# ls
a.txt
(base) root@PC1:/home/test3# cat a.txt         ## 测试数据
1       aa
2       bb
3       aa
4       cc
5       dd
6       cc
7       kk
8       aa
9       kk                                      ## 根据第二列的重复项筛选数据
(base) root@PC1:/home/test3# cut -f 2 a.txt | sort | uniq -d | while read i; do awk -v a=$i '$2 == a' a.txt >> result; done
(base) root@PC1:/home/test3# ls
a.txt  result
(base) root@PC1:/home/test3# cat result       ## 结果文件
1       aa
3       aa
8       aa
4       cc
6       cc
7       kk
9       kk

 

002、R语言实现

 

dir()
dat <- read.table("a.txt")                                ## 测试数据
dat
id <- unique(dat[,2][duplicated(dat[,2])])                ## 提取重复id
id
dat[dat$V2 %in% id,]                                      ## 提取重复数据

 

 

003、python实现

(base) root@PC1:/home/test3# ls
a.txt  test.py
(base) root@PC1:/home/test3# cat a.txt            ## 测试数据
1       aa
2       bb
3       aa
4       cc
5       dd
6       cc
7       kk
8       aa
9       kk
(base) root@PC1:/home/test3# cat test.py          ## 测试程序
#!/usr/bin/python
in_file = open("a.txt", "r")
out_file = open("result.txt", "w")

lines = in_file.readlines()
list1 = []
for i in lines:
    i = i.strip().split()
    list1.append(i[-1])
set1 = set()
for i in list1:
    if list1.count(i) > 1:
        set1.add(i)
for i in lines:
    i = i.strip().split()
    for j in set1:
        if i[-1] == j:
            out_file.write("\t".join(i) + "\n")

in_file.close()
out_file.close()
(base) root@PC1:/home/test3# python test.py        ##  执行程序
(base) root@PC1:/home/test3# ls
a.txt  result.txt  test.py
(base) root@PC1:/home/test3# cat result.txt         ## 结果文件
1       aa
3       aa
4       cc
6       cc
7       kk
8       aa
9       kk

 

posted @ 2022-08-23 20:16  小鲨鱼2018  阅读(213)  评论(0编辑  收藏  举报