首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显式取值范围

显式取值范围
EN

Unix & Linux用户
提问于 2014-07-16 07:44:04
回答 1查看 140关注 0票数 1

是否有使用bash魔术计算文本文件第二列元素之间的范围的干净方法?(我目前正在使用Python进行此操作)。

输入:文件1

代码语言:javascript
复制
A   1-5
A   17-19
B   1-5
B   4-6

预期产出:文件2

代码语言:javascript
复制
A   1,2,3,4,5,17,18,19
B   1,2,3,4,5,6    

编辑@Anthon:要累积元素,我使用类似的方法(然后使用for循环计算范围)

代码语言:javascript
复制
d_pos= {} 
for row in open('File.txt'): 
    x, y = [ value.strip() for value in row.split('\t')] 
    if x in d_pos:        
        d_pos[x].append(y)    
    else:        
        d_pos[x] = [y]
EN

回答 1

Unix & Linux用户

发布于 2014-07-16 08:50:47

您的Python代码非常接近,但是不能处理项目B的4和5的重叠。

以下操作正确地使用set()来防止重叠,设置默认值以消除显式测试--输入行上的d_pos.split()中已经存在键,以减少对\t字符的依赖,并消除显式.strip()

代码语言:javascript
复制
d_pos= {}
for row in open('File.txt'):
    x, y = [ value for value in row.split()]
    y1, y2 = map(int, y.split('-'))
    d_pos.setdefault(x, set()).update(range (y1, y2+1))
for x in sorted(d_pos):
    print '{}\t{}'.format(x, ','.join(map(str, d_pos[x])))
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/144769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档