Como posso excluir uma linha se ela for maior que por exemplo: caracteres 2048?
Como posso excluir uma linha se ela for maior que por exemplo: caracteres 2048?
Respostas:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)
(Mac OS X)
Aqui está uma solução que exclui linhas com 2049 ou mais caracteres:
sed -E '/.{2049}/d' <file.in >file.out
A expressão /.{2049}/d
corresponderá a qualquer linha que contenha pelo menos 2049 caracteres e os excluirá da entrada, produzindo apenas uma linha mais curta na saída.
Com awk
linhas de impressão de comprimento 2048 ou menor:
awk 'length <= 2048' <file.in >file.out
Imitando a sed
solução literalmente com awk
:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)
(Mac OS X)
Algo assim 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()
perl -lne "length < 2048 && print" infile > outfile
-l
não é necessário, no entanto.
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print
. length
é um atalho para length($_)
qualquer maneira.
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 seja solicitado, mas fornecido como referência, o inverso pode ser alcançado com o seguinte código:
sed '/.\{2048\}/!d'
.
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)
( Mac OS X, 10.10.4
)
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:
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