Como deletar linha se for maior que XY?

17

Como posso excluir uma linha se ela for maior que, por exemplo, 2048 caracteres?

    
por LanceBaynes 23.03.2011 / 19:09

6 respostas

19
sed '/^.\{2048\}./d' input.txt > output.txt
    
por 23.03.2011 / 19:26
6

Aqui está uma solução que exclui linhas com 2049 ou mais caracteres:

sed -E '/^.{2049}/d' <file.in >file.out

Estritamente falando, a âncora ^ não é necessária.

Com awk , imprimindo linhas de comprimento 2048 ou menores:

awk 'length <= 2048' <file.in >file.out
    
por 07.09.2011 / 12:13
2

Algo como isso deve funcionar em Python.

of = open("orig")
nf = open("new",'w')
for line in of:         
    if len(line) < 2048:
        nf.write(line)
of.close()
nf.close()
    
por 23.03.2011 / 19:33
1
perl -lne "length < 2048 && print" infile > outfile
    
por 29.01.2014 / 18:14
0

As respostas acima não funcionam para mim no Mac OS X 10.9.5.

O código a seguir funciona:

sed '/.\{2048\}/d' .

Embora não solicitado, mas fornecido como referência, o inverso pode ser obtido com o seguinte código:

sed '/.\{2048\}/!d' .

    
por 13.10.2014 / 18:02
0

Com o gnu-sed, você pode usar o sinalizador -r, para evitar digitar as barras invertidas, e uma vírgula, para definir um intervalo aberto:

sed -r  "/.{2049,}/d" input.txt > output.txt

com:

  • x {2049} significando exatamente 2049 xs
  • x {2049,3072} que significa de 2049 a 3072 xs
  • x {2049,} que significa pelo menos 2049 xs
  • x {, 2049} significando no máximo 2049 xs

Para os intervalos, para não corresponder a padrões maiores, você precisaria de âncoras de linha como

sed -r  "/^.{32,64}$/d" input.txt > output.txt 
    
por 30.11.2018 / 01:17

Tags