首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为我的床文件中的每个脚手架添加一列升序编号

如何为我的床文件中的每个脚手架添加一列升序编号
EN

Stack Overflow用户
提问于 2018-08-02 00:59:03
回答 1查看 61关注 0票数 1

所以我有一个像这样的文件,每一行代表一个位置,但有些位置被省略了。(实际上每个脚手架的行数要多得多):

SCF_1     0  1
SCF_1     3  4
SCF_1     9  10
SCF_2     0  1
SCF_2     4  5
SCF_2     12 13
SCF_2     23 24
SCF_2     79 80
SCF_3     2  3
SCF_4     1  2
...

最终,我想为每个脚手架分别制作100kb大小的窗口(每个脚手架上的最后一个窗口将小于100kb).This是它应该看起来的样子:

SCF_1 0       280000
SCF_1 280000  576300
SCF_1 576300  578000
SCF_2 9002    630000
... 

范围不应该统一,因为有些位置被省略了。我想以某种方式为每个脚手架创建一个递增编号的列,但我是一个编程新手,不知道怎么做。

SCF_1     0  1   0     
SCF_1     3  4   1       
SCF_1     9  10  2        
SCF_2     0  1   0       
SCF_2     4  5   1       
SCF_2     12 13  2        
SCF_2     23 24  3        
SCF_2     79 80  4        
SCF_3     2  3   0       
SCF_3     5  6   1
EN

回答 1

Stack Overflow用户

发布于 2018-08-03 19:25:07

使用awk似乎很容易做到这一点(假设您的文件名为scf.txt):

awk 'BEGIN {OFS = "\t"} {counts[$1]++; print $0,counts[$1]-1}' scf.txt

首先,我们将输出字段分隔符(OFS)设置为表格("\t")。然后,对于每一行,我们查看第一个字段($1),并递增counts表中的相关值,然后print当前行($0),然后是与当前第一列($counts[$1])的值减1相对应的计数器的值。

上面的命令输出以下内容:

SCF_1     0  1  0
SCF_1     3  4  1
SCF_1     9  10 2
SCF_2     0  1  0
SCF_2     4  5  1
SCF_2     12 13 2
SCF_2     23 24 3
SCF_2     79 80 4
SCF_3     2  3  0
SCF_4     1  2  0

您可以重定向到一个新文件来保存结果,而不是将其显示在终端上:

awk 'BEGIN {OFS = "\t"} {counts[$1]++; print $0,counts[$1]-1}' scf.txt > scf_counted.txt

(如果脚手架未分组,此解决方案可能也会起作用,但您似乎不需要此额外功能。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51638668

复制
相关文章

相似问题

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