De você comentário , presumo que seja um arquivo de log com datas de login e logout, por exemplo:
date1 John logout
date2 Sam login
date3 Sam work1
date4 Sam work2
date5 Sam logout
date6 John login
Use awk :
awk 'NR!=1&&$2!=f{print p"\n"$0} {f=$2; p=$0}' file
Onde:
-
NR!=1é verdadeiro quandoawkprocessa todas as linhas, mas a primeira (NRcontém o número da linha no arquivo atual) -
$2!=fcompara o segundo campo$2com o valor da variávelf(fserá definido posteriormente)- Se ambas as configurações se aplicarem,
awkimprime o valor dep(a linha anterior também será definida posteriormente), uma nova linha de linha\ne a linha atual$0.
- Se ambas as configurações se aplicarem,
- O que acontece agora é processado em cada linha: A variável
festá definida para o segundo campo$2e a variávelppara a linha atual$0. Ambos serão usados na próxima iteração (quando a próxima linha for processada).
Isso agora imprime a primeira e a última ocorrência do segundo campo, de modo que as datas e nomes de logout e login. A saída seria então:
date1 John logout
date2 Sam login
date5 Sam logout
date6 John login