Kodomo

Пользователь

Обсудим команду comm


Описание

Команда comm построчно сравнивает два отсортированных* файла. В соответствии с этим наиболее ожидаемым вариантом применения может быть работа с таблицами.

* обзор команды sort был недавно представлен моим коллегой


Синтаксис

comm имя_файла_1 имя_файла_2

Результатом работы программы будут 3 колонки:

1 - строки, уникальные для файла 1

2 - строки, уникальные для файла 2

3 - общие для файлов 1 и 2 строки

Замечательно, что при этом строки будут выведены в тех же позициях, что и в собственных файлах!

Примеры

Сначала рассмотрим случай, когда в сравниваемых файлах одинаковое количество строк (все строки будут спарены)

a.k.rybakov@kodomo:~/term1$ comm 11.txt 22.txt
1A
        1C
2A
        2C
        3A
3C
        4A
4T
                5G
                6G
                7G
                8C
        9C
9C

А теперь пусть в файле 1 будет двумя строками больше. В этом случае напротив "лишних" строк в более длинном файле ничего не будет стоять, а ещё программа дважды предупредит нас о "недосортировке":

a.k.rybakov@kodomo:~/term1$ comm 11.txt 22.txt
1A
        1C
2A
        2C
        3A
3C
        4A
4T
                5G
                6G
                7G
                8C
        9C
9C
comm: file 1 is not in sorted order
10A
11G
comm: input is not in sorted order

Опции

Логично было бы убрать замечания о "недосортировке". Сделать это можно с использованием параметра --nocheck-order:

a.k.rybakov@kodomo:~/term1$ comm --nocheck-order 11.txt 22.txt
1A
        1C
2A
        2C
        3A
3C
        4A
4T
                5G
                6G
                7G
                8C
        9C
9C
10A
11G

Закономерным будет теперь желание избавиться от 1 и 2 колонок, чтобы смотреть только на совпавшие строки. Для этого как параметр мы должны ввести номера строк, которые мы не хотим видеть:

a.k.rybakov@kodomo:~/term1$ comm -12  11.txt 22.txt
5G
6G
7G
8C
comm: file 1 is not in sorted order
comm: input is not in sorted order

Аналогично можно упразднить вывод и других наборов строк (например, -3).

Разумеется, параметры можно задать comm'у одновременно!

a.k.rybakov@kodomo:~/term1$ comm --nocheck-order -12 11.txt 22.txt
5G
6G
7G
8C


Чем она может быть полезна

Абсолютно все известные форматы хранения данных о нуклеотидных/белковых последовательностях представляют наборы строк. С учётом развития современных методов исследования НК и белков, могло бы оказаться полезным аннотирование каждого единичного символа в последовательности (что особенно касается белков), для чего удобен формат "один символ - одна строка":

(position) (amino acid) (description)

001M start

...

117S catalytic center, Mn-binding domain, source of information: (doi)

...

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

Users/a.k.rybakov/pr3 (последним исправлял пользователь a.k.rybakov 2022-09-24 18:08:39)