gpt4 book ai didi

linux - 如何为我的床文件中的每个脚手架添加一列升序数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:16 26 4
gpt4 key购买 nike

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

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)。它应该是这样的:

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

最佳答案

这似乎可以很简单地使用 awk(假设您的文件名为 scf.txt):

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

首先,我们将输出字段分隔符 (OFS) 设置为制表符 ("\t")。然后,对于每一行,我们查看第一个字段 ($1) 并增加 counts 表中的关联值,并打印当前行($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

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

关于linux - 如何为我的床文件中的每个脚手架添加一列升序数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51638668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com