Заменить точные цифры в порядке следования - PullRequest
0 голосов
/ 29 октября 2018

У меня есть этот файл, и я хотел бы заменить номер 3-го столбца, чтобы они отображались по порядку. Также мне нужно пропустить первую строку (заголовок файла).

Исходный файл:

#results from program A
    8536    17  1   CGTCGCCTAT  116 147M2D
    8536    17  1   CGTCGCTTAT  116 147M2D
    8536    17  1   CGTTGCCTAT  116 147M2D
    8536    17  1   CGTTGCTTAT  116 147M2D
    2005    17  3   CTTG    61  145M
    2005    17  3   TTCG    30  145M
    91823   17  4   ATGAAGC 22  146M
    91823   17  4   GTAGGCC 19  146M
    16523   17  5   GGGGGTCGGT  45  30M1D115M

Измененный файл:

#results from program A
    8536    17  1   CGTCGCCTAT  116 147M2D
    8536    17  1   CGTCGCTTAT  116 147M2D
    8536    17  1   CGTTGCCTAT  116 147M2D
    8536    17  1   CGTTGCTTAT  116 147M2D
    2005    17  2   CTTG    61  145M
    2005    17  2   TTCG    30  145M
    91823   17  3   ATGAAGC 22  146M
    91823   17  3   GTAGGCC 19  146M
    16523   17  4   GGGGGTCGGT  45  30M1D115M

Ты знаешь, как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

другой минималист awk

$ awk '{$3=c+=p!=$1;p=$1}1' file | column -t

8536   17  1  CGTCGCCTAT  116  147M2D
8536   17  1  CGTCGCTTAT  116  147M2D
8536   17  1  CGTTGCCTAT  116  147M2D
8536   17  1  CGTTGCTTAT  116  147M2D
2005   17  2  CTTG        61   145M
2005   17  2  TTCG        30   145M
91823  17  3  ATGAAGC     22   146M
91823  17  3  GTAGGCC     19   146M
16523  17  4  GGGGGTCGGT  45   30M1D115M

с версией заголовка

$ awk 'NR==1; NR>1{$3=c+=p!=$1;p=$1; print | "column -t"}' file

#results from program A
8536   17  1  CGTCGCCTAT  116  147M2D
8536   17  1  CGTCGCTTAT  116  147M2D
8536   17  1  CGTTGCCTAT  116  147M2D
8536   17  1  CGTTGCTTAT  116  147M2D
2005   17  2  CTTG        61   145M
2005   17  2  TTCG        30   145M
91823  17  3  ATGAAGC     22   146M
91823  17  3  GTAGGCC     19   146M
16523  17  4  GGGGGTCGGT  45   30M1D115M
0 голосов
/ 29 октября 2018

Не могли бы вы попробовать следующее.

awk 'prev!=$1{++count}{$3=count;prev=$1;$1=$1} 1' OFS="\t"  Input_file

Для удаления заголовков используйте следующее:

awk 'FNR==1{print;next}prev!=$1{++count}{$3=count;prev=$1;$1=$1} 1' OFS="\t"  Input_file

Решение 2-е: В случае, если 1-е поле вашего Input_file НЕ в порядке, вам могут помочь следующие.

awk 'FNR==NR{if(!a[$1]++){b[$1]=++count};next} {$3=b[$1];$1=$1} 1' OFS="\t" Input_file  Input_file

Чтобы удалить заголовки для 2-го решения выше, используйте следующее.

awk 'FNR==1{if(++val==1){print};next}FNR==NR{if(!a[$1]++){b[$1]=++count};next} {$3=b[$1];$1=$1} 1' OFS="\t" Input_file  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...