Remove Control Retorna e mescla linhas em um arquivo de texto e limita o número de caracteres

1

Eu quero remover o Control Return e mesclar linhas em um arquivo de texto e limitar o número de caracteres

input.txt contendo:

comment 1
comment 2 
...
comment n 

output.txt deve ser uma string:

comment 1 comment 2 ... commnet n

MAS o ouput.txt deve ser limitado a, por exemplo, 32 caracteres:

comment 1 comment 2 comment 3 co

Posso usar sed, awk tr ou alguma outra coisa?

    
por Confluentes Info 10.09.2017 / 12:50

3 respostas

1

head -c 32 input.txt | tr '\n' ' ' > output.txt
  • head -c 32 descarta todos, exceto os primeiros 32 bytes.

  • tr '\n' ' ' substitui todos os caracteres de nova linha por caracteres de espaço.

Se você quiser limitar caracteres ao invés de bytes no caso de codificações de caracteres de bytes múltiplos, você pode usar grep :

tr '\n' ' ' < input.txt | grep -oEe '^.{,32}' > output.txt
    
por David Foerster 10.09.2017 / 13:50
0

Awk ficará bem. Uma maneira é:

$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt 
comment 1comment 2...comment 

Explicação: por padrão, o awk processa a entrada linha por linha, com uma única linha chamada registro ; cada linha processada coluna por coluna, com coluna única chamada campo . Cada campo é referido por variáveis que começam com 1, por ex. $ 1, $ 2, $ 3…

Assim, você altera o comportamento padrão configurando o eparador F ield S para "" , fazendo com que o awk processe o material caractere por caractere. Então você ajusta R ecord S eparator para "" , então você pode se referir a caracteres de todo o texto de uma só vez (isto é, sem escrever um código para lidar com coisas por linha) .

Finalmente, você pode facilmente operar em caracteres, então você faz um loop pelos campos (isto é, caracteres) , e imprime somente quando o caractere não é um retorno de carro.

    
por Hi-Angel 10.09.2017 / 13:49
0
tr '\n' ' ' < in.txt | cut -c -32
  • tr '\n' ' ' : remova novas linhas do texto de entrada
  • cut -c -32 : limita a saída para 32 caracteres
por George Udosen 10.09.2017 / 21:57