Чтобы извлечь строки из data.txt
с генами, перечисленными в genelist.txt
:
grep -w -F -f genelist.txt data.txt > newdata.txt
grep
:
-w
указывает grep
соответствовать только целым словам (т. е. ABC123
также не будет соответствовать ABC1234
). -F
искать фиксированные строки (простой текст), а не регулярные выражения -f genelist.txt
читать шаблоны поиска из файла Если вам нужен заголовок (Пример 1, Пример 2 и т. Д.):
grep -w -F -f genelist.txt -e Sample data.txt > newdata.txt
-e Sample
также ищите "Sample" Чтобы найти строки в genelist.txt
, которых нет в newdata.txt
:
grep -v -w -F -f <(sed -E -e 's/(\t| +).*//' newdata.txt) genelist.txt
-v
инвертировать поиск, печатать несовпадающие строки. Остальные параметры grep такие же, но вместо использования файла с параметром -f
используется так называемая подстановка процесса (см. также ), что позволяет использовать команду вместо фактического файла. Какой бы вывод ни создавала команда, рассматривается как содержимое «файла».
В этом случае мы используем команду sed -E -e 's / (\ t | +). * //' newdata.txt
, которая выводит каждую строку newdata.txt после первого удаления всего либо из первого символа TAB, либо из первой пары пробелов, которые он видит. Другими словами, первое поле (например, «Ген А»). Мне пришлось использовать TAB или двойной пробел, потому что а) я не был уверен, были ли ваши данные разделены пробелами или TAB, и б) первые поля в вашем примере содержали пробелы.
Использованные параметры sed
:
-E
использовать расширенные регулярные выражения, поэтому мы можем использовать простые (
, )
и +
, которые более читабельны, чем необходимость экранировать их с помощью \
как \ (
, \)
, \ +
. -e 's / (\ t | +).* // '
указывает сценарий sed для применения к входу (newdata.txt) Выполнение этой команды в вашем примере data.txt
приведет к следующему результату:
$ sed -E -e 's/(\t| +).*//' data.txt
Gene A
Gene B
Gene C
Gene D
В любом случае, вывод этой команды sed
используется как список шаблонов поиска командой grep
.
Политика Debian требует изменения имени пакета при изменении SONAME (как другие правильно указали на связь с номерами версий). Номер интерфейса 10
в выпусках 5.0.x
, поэтому рекомендуется сделать его частью имени пакета.
Обратите внимание, что версия 5.1.0
имеет age = 1
, что означает, что он может «предоставлять» оба номера интерфейса 10
и 11
. Не уверен, действительно ли Debian это делает.
Вы имеете в виду версию libtool , которая обычно не связана с версией выпуска библиотеки.
Беглый взгляд на источники покажет вам, что версии установлены в Makefile.am
, с блоком комментариев перед значениями, дающими сводку истории.
Вот фрагмент, в котором вы увидите номера пакета Debian (информация о версии libmp находится в последнем столбце):
# release libgmp libgmpxx libmp
...
# 5.0.1 10:1:0 6:1:2 4:21:1
# 5.0.2 10:2:0 6:2:2 4:22:1
# 5.0.3 10:3:0 6:3:2 4:23:1
# 5.0.4 10:4:0 6:4:2 4:24:1
# 5.0.5 10:5:0 6:5:2 4:25:1
# 5.1.0 11:0:1 7:0:3 -
и (текущая)
# 6.1.2 13:2:3 9:2:5 -
и
# We interpret "implementation changed" in item "1." above as meaning any
# release, ie. the REVISION is incremented every time (if nothing else).
# Even if we thought the code generated will be identical on all systems,
# it's still good to get the shared library filename (like
# libgmpxx.so.3.0.4) incrementing, to make it clear which GMP it's from.
LIBGMP_LT_CURRENT = 13
LIBGMP_LT_REVISION = 2
LIBGMP_LT_AGE = 3
LIBGMPXX_LT_CURRENT = 9
LIBGMPXX_LT_REVISION = 2
LIBGMPXX_LT_AGE = 5