Aparar linhas em um comprimento específico

Aparar linhas em um comprimento específico

Eu tenho um arquivo com muitas linhas e quero cortar cada linha para ter 80 caracteres. Como eu poderia fazer isso?

Já filtrei linhas com menos de 80 caracteres, então agora fico com um arquivo que tem linhas com mais de 80 caracteres de comprimento e quero cortar cada linha para que todas tenham exatamente 80. Em outras palavras, quero preservar o primeiros 80 caracteres em cada linha e remova o restante da linha.

Responder1

Você pode usar o cutcomando:

cut -c -80 file

Com grep:

grep -Eo '.{80}' file

Responder2

UsandoAWK:

awk '{print substr($0,1,80)}' file.txt

Usandocorte:

 cut -c -80 file.txt

Usandocolrm:

colrm 81 file.txt

Usandosed:

sed 's/^\(.\{80\}\).*$/\1/' file.txt

Usandogrep:

grep -Eo '.{80}' file.txt

Responder3

Para cortar (truncar) cada linha do arquivo (e ter a saída no console atual) use:

cut -c -80 infile               # cut only counts bytes (fail with utf8)
grep -o '^.\{1,80\}' infile
sed 's/\(^.\{1,80\}\).*/\1/' infile

Se o que você deseja é inserir uma nova linha no caractere 80 e dividir cada linha com mais de 80 caracteres em mais linhas, use:

fold -w 80 infile            # fold, like cut, counts bytes.

Se você quiser dividir apenas em espaços (palavras inteiras), use:

fold -sw 80 infile

Para todas as soluções acima, redirecione para algum outro arquivo como >outfile(não use o mesmo nome, isso não funcionará) no final de qualquer comando para armazenar o resultado em formato outfile. Exemplo:

fold -sw 80 infile > outfile

Responder4

Usando Raku (née Perl6)

~$ raku -ne 'put ~$0 if m/ ^^(. ** 80) /;'

SAÍDA:

the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
[TRUNCATED]

O código acima retorna os primeiros 80 caracteres de uma linha (a ^^asserção de largura zero significa "início de linha"). Se a linha for muito curta, nada será retornado. Para retornarATÉ80 caracteres, use o formulário ** 1..80.

A numeração das capturas começa com $0. Obtenha uma leitura do número de caracteres retornados adicionando .charsà ~$0variável de captura:

~$ raku -ne 'put ~$0.chars if m/ ^^(. ** 80) /;' ~/top50.txt
80
80
80
80
[TRUNCATED]

HTH.

https://raku.org

informação relacionada