Consecutivamente copie duas linhas e pule a terceira usando o awk

0

Com muito simplesmente awk :

awk '(NR%3)' awk.write

para este arquivo:

this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line

Eu tenho como saída:

this line 1 no un1x
this lines 22 0
but not 1
THIS is not
second line

Mas a última linha não é desejada, pois não qualifica a definição de consecutiva.

Como posso obter as duas primeiras de cada três linhas consecutivas?

    
por asadz 08.01.2016 / 08:04

1 resposta

4

Você pode usar uma variável para rastrear se a linha anterior está presente ou não:

$ awk '
  FNR % 3 == 1 {f = $0; next}  # The first line keep in f, skip to next line
  FNR % 3 && f {print f;print} # Previous line present, print it and current line
' <file
this line 1 no un1x
this lines 22 0
but not 1
THIS is not

Ou com sed :

sed -ne 'N;/\n/p;N;d' <file
    
por 08.01.2016 / 08:11