Como gerar ou imprimir seqüências perdidas?

3

Eu tenho um arquivo .txt com amostra da seguinte forma,

010.123.32.0001
010.123.32.0021
010.123.33.0001
...
010.123.33.9991
010.123.32.9012
010.123.33.0005

Eu preciso pegar (ou em outra palavra imprimir) aquelas seqüências que não existem no meu arquivo, eu apenas penso em gerar um arquivo com todas as seqüências existentes e fazer grep ou awk nele para obter aquelas seqüências que existem em fakeGeneratedAllSequences mas não no meu arquivo real com greping

grep -Fvf sequences.txt fakeGeneratedAllSequences > missedSequences

Mas estou procurando um comando para facilitar as seqüências perdidas, obrigado

    
por αғsнιη 16.10.2016 / 17:35

1 resposta

2

Isso deve ser feito:

grep -xvFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
  • printf '%s\n' 010.123.{32..33}.{0001..9999} gera todos os padrões possíveis (altere os intervalos para atender à sua necessidade), a expansão de chaves, {start..end} , está fazendo a expansão do intervalo aqui

  • a saída é exibida para grep como um descritor de arquivo, feito por substituição de processo <()

grep opções:

  • -x combina toda a linha
  • -v inverte a correspondência
  • -F trata padrão (s) literalmente, nenhuma expansão de Regex é feita
  • -f recebe o (s) padrão (s) de entrada do arquivo seguindo esta opção

Exemplo:

% 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>
    
por heemayl 16.10.2016 / 17:39