Да, я честно говоря, думал что plink может делать подобную фильтрацию, а оказывается - нет (посидел я с ним пару часов, изучил маны).
т.е. нужный Вам фильтр надо написать.
Сразу возникают вопросы:
1) В Raw Data файле - строки отфильтрованы всегда в порядке возрастания локусов, или не обязательно?
2) Нужно ли показывать в PED и те аллели - которых нет в Raw Data, заполняя их нулями, или же предполагается - что "те строки, что читаем из инпута - кладём в колонки в аутпут, как есть"? (в этом случае фильр можно сделать экстремально быстрым, не кушающим память и не использующим внешних временных хранилищ).
А если файл для одного человека имеет снип, которого нет в другом файле? (если это возможно, то надо поддерживать список/мэп в отдельном файле для тех аллелей, которые показываются в выходном PED, даже если они нули. Где взять такой полный список снипов?)
3) Нужны ли другие маппинги, типа возможность поменять что-то на что-то (как позволяет plink)?
4) Каким образом загружать FAM файлы, т.е. сообщать - к какой группе, индивиду итд (первые 6 колонок) относится данный 23andme файл? Для этого, например, можно использовать TFAM формат из документации plink'а, но добавить 7ю колонку - имя файла со снипами. Или если в файле снипы для многих людей - надо вводить и ID для линковки. Как удобнее (это зависит от приходящих данных - каких больше всего?)? Иными словами - что предполагается в будущем - один RAW файл на человека, или RAW файл на группу людей?