Как создать или распечатать пропущенные последовательности? - proUbuntu
Винтажный Клуб для гитаристов
2 голосов
/

У меня есть файл .txt с образцом, как показано ниже,

010.123.32.0001
010.123.32.0021
010.123.33.0001
...
010.123.33.9991
010.123.32.9012
010.123.33.0005

Мне нужно получить (или другим словом print) те последовательности, которых нет в моем файле, я просто думаю создать файл со всеми существующими последовательностями и выполнить grep или awk для него, чтобы получить те последовательности, которые существуют в fakeGeneratedAllSequence, но не в моем реальном файле с greping

grep -Fvf sequences.txt fakeGeneratedAllSequences > missedSequences

Но я ищу команду, если можно легко упустить пропущенные последовательности, спасибо

1 Ответ

2 голосов
/

Это должно сделать:

grep -xvFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
  • printf '%s\n' 010.123.{32..33}.{0001..9999} генерирует все возможные шаблоны (измените диапазоны в соответствии с вашими потребностями), расширение скобки, {start..end}, здесь выполняется расширение диапазона

  • вывод подается на grep в качестве дескриптора файла, выполняемого подстановкой процесса <()

grep опции:

  • -x соответствует ли целая строка
  • -v инвертирует совпадение
  • -F трактует шаблоны буквально, расширение Regex не выполняется
  • -f принимает входные шаблоны из файла после этой опции

Пример:

% cat file.txt
010.123.32.0001
010.123.32.0021
010.123.33.0001
010.123.33.9991
010.123.32.9012
010.123.33.0005

% grep -xFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
010.123.32.0001
010.123.32.0021
010.123.32.9012
010.123.33.0001
010.123.33.0005
010.123.33.9991

% grep -xvFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
010.123.32.0002
010.123.32.0003
010.123.32.0004
010.123.32.0005
010.123.32.0006
010.123.32.0007
010.123.32.0008
010.123.32.0009
010.123.32.0010
010.123.32.0011
<truncated>
Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...