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