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 @   小鲨鱼2018  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-08-23 c primer plus 7编程练习
点击右上角即可分享
微信分享提示