我有一个可分隔的选项卡,其中:
GL89 AADAC
GL89 AFGAC
GL89 AFDAC
GL50 AC923
GL50 AC923
GL79 AC923
GL99 AC923
GL99 AC923
GL60 AC100
GL60 AC100
GL20 AC200
GL30 AC300
GL30 AC400我希望消除column#2的一个值至少对应于两个或多个column#1值的行,在这种情况下,应该删除下面的行。
GL50 AC923
GL79 AC923
GL99 AC923
GL99 AC923把剩下的桌子留着:
GL89 AADAC
GL89 AFGAC
GL89 AFDAC
GL60 AC100
GL60 AC100
GL20 AC200
GL30 AC300
GL30 AC400有什么表格吗?谢谢!
发布于 2021-06-10 21:10:34
解决此问题的适当数据结构是set和dictionary。
巨蟒都内置了。
python3 -c 'import sys
ifile = sys.argv[1]
fs,ors = "\t","\n"
d = {}; L = {}
with open(ifile) as fh:
for l in fh:
c1,c2 = l.rstrip().split(fs)
if c2 in d:
d[c2].add(c1)
L[c2].append(l.rstrip())
else:
d[c2] = { c1 }
L[c2] = [ l.rstrip() ]
print(*[l
for k,v in d.items()
if len(v) == 1
for l in L[k]
], sep=ors)
' file输出:
GL89 AADAC
GL89 AFGAC
GL89 AFDAC
GL60 AC100
GL60 AC100
GL20 AC200
GL30 AC300
GL30 AC400https://unix.stackexchange.com/questions/653683
复制相似问题