如何在床文件中对具有相同名称的序列进行编号

时间:2019-05-30 09:45:02

标签: shell awk paste

我有一个像这样的文件床。

    KQ4156  0       34      Simple_repeat   .   +
    KQ4156  35      64      Simple_repeat   .   +
    KQ4156  1759    1822    Simple_repeat   .   +
    KQ4156  1901    2059    Simple_repeat   .   -
    KQ4156  2112    2258    DNA/hAT-Charlie .   +
    KQ4156  2890    2964    Simple_repeat   .   +
    KQ4156  4085    4130    DNA/hAT-Charlie .   +
    KQ4156  5587    5619    Simple_repeat   .   +
    KQ4156  5931    5995    SINE/tRNA-Deu   .   -

为进行后续分析,我需要区分相同的元素。 es。 simple_repeats_1, simple_repeats_2,等和DNA/hAT-Charlie_1, DNA/hAT-Charlie_2,等...的所有元素。 使用的脚本是这样的:

awk 'BEGIN{OFS="\t"}{if(NR>3) {if($9=="C"){strand="-"}else{strand="+"};print $5,$6-1,$7,$11,".",strand}}' file.fa.out > file.bed

如何修改它以获取所需的内容?我考虑过应用paste,但我不知道如何将其应用于所有序列

2 个答案:

答案 0 :(得分:3)

请您尝试以下。

awk 'BEGIN{OFS="\t"} {$4=$4"_"++count[$4]} 1'  Input_file

答案 1 :(得分:2)

使用表的awk解决方案是最简单的:

awk -vOFS='\t' '{ seen[$4]++; $4=$4"_"seen[$4]; print; }' file

将输出:

KQ4156  0   34  Simple_repeat_1 .   +
KQ4156  35  64  Simple_repeat_2 .   +
KQ4156  1759    1822    Simple_repeat_3 .   +
KQ4156  1901    2059    Simple_repeat_4 .   -
KQ4156  2112    2258    DNA/hAT-Charlie_1   .   +
KQ4156  2890    2964    Simple_repeat_5 .   +
KQ4156  4085    4130    DNA/hAT-Charlie_2   .   +
KQ4156  5587    5619    Simple_repeat_6 .   +
KQ4156  5931    5995    SINE/tRNA-Deu_1 .   -