Как сохранить строки, если есть определенное количество наблюдений, основанных на первом столбце?

Менеджер пакетов debian (dpkg ), безусловно, является одним из самых безопасных способов обновления программного обеспечения. Если вы не добавили сторонние репозитории в apt и следили за стабильными выпусками, у вас не должно возникнуть проблем, поскольку все обновления и новое программное обеспечение тестируются задолго до того, как они попадают в эти репозитории. Он считается одним из самых стабильных дистрибутивов, но помните, что он не может быть без ошибок во всех возможных ситуациях.

Вы должны быть в порядке, просто используя apt-get updateи apt-get upgrade, так как вариант dist-upgradeбудет "менее заботливым" в отношении зависимостей. Кроме того, перед перезаписью каждый файл проверяется на наличие изменений или если он уже существует, поэтому он будет спрашивать вас, прежде чем почти все, что может сломать ваш проприетарный драйвер.

Также учтите, что драйверы в linux скомпилированы как модули ядра, поэтому следует позаботиться о добавлении драйвера nouveau в черный список, чтобы он никогда не загружался, даже если он установлен. У Nvidia, безусловно, есть Debian в их тестовом списке, чтобы улучшить ситуацию.

В общем, ты должен быть в безопасности,но никто не может гарантировать вам это, и наличие стороннего программного обеспечения увеличит ваши шансы столкнуться с проблемами, какими бы они ни были.

-1
25.12.2019, 05:50
3 ответа

Неэлегантный, но прагматичный:

$ awk 'NR==FNR {a[$1]++; next} a[$1]==3' data data
2L:647803 1 2 44.31655 -12.2373
2L:647803 1 2 43.63717 -12.302
2L:647803 1 2 43.80007 -12.3451
2L:2602906 1 2 43.39748 -11.4894
2L:2602906 1 2 44.43951 -12.3093
2L:2602906 1 2 43.80007 -12.3451
2L:3146785 1 2 44.31655 -12.2373
2L:3146785 1 2 44.43951 -12.3093
2L:3146785 1 2 43.80007 -12.3451
5
28.04.2021, 23:26

Использование Миллера(https://github.com/johnkerl/miller)и запуск

mlr --nidx count-similar -g 1 then filter '$count==3' then cut -x -f count inputfile

у тебя есть

2L:647803 1 2 44.31655 -12.2373
2L:647803 1 2 43.63717 -12.302
2L:647803 1 2 43.80007 -12.3451
2L:2602906 1 2 43.39748 -11.4894
2L:2602906 1 2 44.43951 -12.3093
2L:2602906 1 2 43.80007 -12.3451
2L:3146785 1 2 44.31655 -12.2373
2L:3146785 1 2 44.43951 -12.3093
2L:3146785 1 2 43.80007 -12.3451
  • mlr --nidx count-similar -g 1для подсчета различных значений поля 1
  • then filter '$count==3'для фильтрации только тех строк, для которых этот счетчик = 3
  • then cut -x -f countдля удаления столбца счета
2
28.04.2021, 23:26

Вот ещеawk(и ничего кромеawk)решения.

  • Предполагается, что ввод сопоставляется по «SNPid»; т. е. все строки с SNPid = 647 будут вместе.
  • Не предполагается, что ввод отсортирован; то есть SNPid 647 может появляться до или после 2602.
  • Он выполняет только один проход по данным.
  • Он не выводит никаких данных для идентификаторов SNP, которые встречаются более трех раз.
awk '
  {
    if ($1 == last) {
        count++
        if (count <= 3) line[count] = $0
    } else {
        if (count == 3) { print line[1]; print line[2]; print line[3]; }
        last = $1
        count = 1
        line[count] = $0
    }
  }
END {   if (count == 3) { print line[1]; print line[2]; print line[3]; } }
  '

Он просто считает последовательные строки которые имеют одинаковое значение в первом поле / столбце($1)и сохраняет строки с тем же значением. Если он встречает новое значение (или конец ввода ), то если предыдущее значение появилось три раза, он распечатывает сохраненные строки.

0
28.04.2021, 23:26

Теги

Похожие вопросы