Обсудим команду 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) ...
Также в таком формате возможно хранение пространственных координат;) Если с помощью другой команды найти способ циклически передвигать строки внутри файла, можно попробовать поделать простые выравнивания.