Removendo linhas indesejadas no arquivo de texto

3

Tudo o que preciso é o código sed ou awk para remover as linhas pares num arquivo de texto. Nada extravagante Só preciso remover dados irrelevantes nas linhas pares de um arquivo de texto.

    
por user177073 30.07.2013 / 01:37

4 respostas

6

Simplesmente:

sed 'n;d' file

para linhas pares e

sed '1!n;d' file

para linhas ímpares.

Com a implementação GNU de sed , você também pode usar esta sintaxe:

Estranho:

sed '1~2d' file

Mesmo:

sed '2~2d' file
    
por 30.07.2013 / 01:39
2

Você pode remover as linhas mencionadas de texto indesejável por assim

sed -i '/[REGEX]/d' <FILE> 

Em que [REGEX] é uma expressão regular que corresponde à linha indesejada de texto e <FILE> é o nome do arquivo do qual você deseja remover o texto. Você pode aninhar os comandos delete ( //d ) da seguinte forma:

sed '/[REGEX]/d ; /[REGEX]/d ; /[REGEX]/d'

Veja um exemplo:

echo "a" > file ; echo "abcd" >> file 
sed -i '/^a$/d' file
cat file # => abcd

Se a sua versão de sed não for compatível com a opção -i , você poderá usar o seguinte para o mesmo efeito.

cat file | sed '/[REGEX]/d' > file_2 && cat file_2 > file && rm file_2


Uma palavra para o sábio

Redirecionar a saída de cat file de volta para file não terá o efeito desejado. De fato, truncará file completamente, isto é, apagará completamente file .

Então, não faça isso:

cat file | sed '/[REGEX]/d' > file
    
por 30.07.2013 / 04:07
0

Veja a solução :

Para excluir linhas ímpares:

awk 'NR%2==0{ print $0 > "infile" }' infile

Para excluir linhas pares:

awk 'NR%2{ print $0 > "infile" }' infile

Observe que os comandos acima excluem as linhas relacionadas in-place do arquivo infile input, portanto, tome cuidado para gravar a saída no mesmo arquivo de entrada.

Você pode gravá-los em outro arquivo separado, como segue:

Isso criará o arquivo EvenLines contendo um número par de linhas:

awk 'NR%2==0{ print $0 > "EvenLines" }' infile

E este criará o arquivo OddLines contendo números ímpares de linhas:

awk 'NR%2{ print $0 > "OddLines" }' infile
    
por 29.01.2015 / 13:02
-1
sed '0~2d' file

Este comando é usado para excluir as linhas pares nos arquivos.

    
por 29.01.2015 / 11:08