Encontre furos em uma enumeração no awk

4

Eu tenho um arquivo que se parece com isso

1400a_comp      49472                       2868636.1026583919660    GOOD      
1400a_comp      49473                       2868647.1026579919650    GOOD      
1400a_comp      49474                       2868659.1026575919639    GOOD      
1400a_comp      49475                       2868670.1026571919627    GOOD      
1400a_comp      49476                       2868682.1026567819614    GOOD      
1400a_comp      49477                       2868693.1026563819603    GOOD 

Eu quero pesquisar no arquivo por instâncias em que o segundo campo não é incrementado em um e imprime o número da linha

    
por ron 18.12.2013 / 18:58

2 respostas

5

Parece que você quer algo como:

awk '$2!=last+1{print NR}{last=$2}' filename

Isto compara o segundo campo com o último valor e imprime se igual a mais um; então o segundo campo desta linha é salvo para a próxima comparação. Isso sempre exibirá a primeira linha (q.e.d.).

    
por 18.12.2013 / 19:04
5

Eu gosto da solução da @Arcege, mas ela produz a primeira linha, não importa o quê. Se você quiser suprimir a linha do punho, você pode usar uma pequena modificação para sua solução como

awk 'NR != 1 && $2!=last+1{print}{last=$2}' filename
    
por 18.12.2013 / 21:28

Tags