Quebra de frases em colunas

4

Estou procurando uma maneira de pegar frases e envolvê-las. Usar algo como column não é o que eu quero, pois no meu cenário haverá várias colunas de frases nos 80 caracteres.

Existe alguma maneira de fazer isso? Devo notar que fazer uma vez sentença não é um problema. Está fazendo vários ao mesmo tempo.

5/15/2014 | Sexta-feira | Servidor caiu e causou interrupção | Rick acidentalmente desligou.

eu adicionei o | delimitar. Mas cada um deles seria envolvido em um determinado comprimento. Tudo ao mesmo tempo em relação um ao outro.

    
por Biff 22.05.2014 / 02:26

4 respostas

4

Você provavelmente está falando sobre fold .

$ echo abcdefghijklmnop | fold -w 4
abcd
efgh
ijkl
mnop

De man fold (mostrando apenas as opções mais relevantes, há mais algumas):

DESCRIPTION
   Wrap  input  lines in each FILE (standard input by default), writing to
   standard output.
   -s, --spaces
          break at spaces

   -w, --width=WIDTH
          use WIDTH columns instead of 80
    
por 22.05.2014 / 02:32
2

Um formatador de texto simples chamado fmt vem com a maioria das distros. Nos velhos tempos, antes do comando gq do Vim, você executaria o texto através de fmt dentro de vi com: %!fmt .

Parece que há um substituto chamado par , mas não tenho experiência com isso.

fmt parece ser parte dos GNU coreutils.

    
por 22.05.2014 / 03:54
1

Você quer dizer algo assim?

$ cat temp
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ INPUTS=""
$ FOLDWIDTH=5
$ FILENAME=temp
$ cat $FILENAME
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ for i in $(seq 1 $(awk 'END{print NR}' $FILENAME))
> do
> INPUTS="$INPUTS <(awk 'NR==$i' $FILENAME | fold -w $FOLDWIDTH)"
> done
$ bash -c "paste $INPUTS"
This    This    Final
is So   is Al    Call
me Lo   so So   : Som
ng Te   me Lo   e Tex
xt to   ng Te   t to
 Test   xt to   Compl
         Test   ete T
                his

É um pouco hack-y, especialmente o uso de bash -c para iniciar um processo filho para interpretar a linha de comando final. Eu estava tentando pensar em outras maneiras de analisar o arquivo linha por linha e alimentar cada um deles como um descritor de arquivo em paste , mas não consegui uma boa solução, recorrendo assim a isso. Além disso, minha sugestão é usar a substituição do processo bash no caso de usar bash -c não é óbvio o suficiente.

    
por 22.05.2014 / 12:21
0

Você também pode fazer isso em sed ,

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\n/g'
abcd
efgh
ijkl
mnop

Para excluir a última linha em branco,

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\n/g' | sed '/^$/d'
abcd
efgh
ijkl
mnop
    
por 22.05.2014 / 04:01