Apagar todas as linhas Nth no shell

7

Estou tentando excluir uma linha depois de N linhas usando o awk e não consigo acertar. O formato do arquivo é assim

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX

O exemplo real seria

office3
3
1
office3
6
1
office3
6
3
office3
1
1

Como posso excluir as linhas YY ou as linhas que dizem "office". Preciso excluir uma linha a cada duas linhas, independentemente do conteúdo delas.

    
por mormaii2 14.11.2014 / 18:30

2 respostas

11

Se você tem o GNU sed, você pode usar a notação de endereço n~m ( n skip m )

sed '1~3d' file

que exclui todas as terceiras linhas, começando no primeiro.

    
por 14.11.2014 / 18:42
9

Para selecionar apenas as linhas modulo N com awk try

awk '!(NR%2)' file

ou

awk 'NR%3==0' file

Aqui NR indica o número de linhas processadas até o momento.

No seu caso específico (remova todas as linhas com Y ):

$ echo 'YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX' | awk '!(NR%3==1)'
XXXXXX
XXXXXX
XXXXXX
XXXXXX
    
por 14.11.2014 / 18:38