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 quandoawk
processa todas as linhas, mas a primeira (NR
contém o número da linha no arquivo atual) -
$2!=f
compara o segundo campo$2
com o valor da variávelf
(f
será definido posteriormente)- Se ambas as configurações se aplicarem,
awk
imprime o valor dep
(a linha anterior também será definida posteriormente), uma nova linha de linha\n
e a linha atual$0
.
- Se ambas as configurações se aplicarem,
- O que acontece agora é processado em cada linha: A variável
f
está definida para o segundo campo$2
e a variávelp
para 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