SoloCodigo

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: xrebeldex en Viernes 9 de Julio de 2010, 12:08

Título: SCript BAsh
Publicado por: xrebeldex en Viernes 9 de Julio de 2010, 12:08
Holaa, bueno queria pediros un favor, esque tengo que crear un script que haga lo siguiente...
1.- Entra por pantalla un texto por ejemplo  asi:

----------------------cuerpo del fichero  ----------------------------------
este es el fichero de ejemplo
es un fichero de texto plano     que tiene varias
lineas y por linea diferente cantidad de caracteres y espacios en blanco

---------------------------------------------------------------------------------------------

Bueno, quiero que el script pase por el fichero y lo deje con un maximo de 13 caracteres por lìnea y respetando los saltos de linea, deberia quedar asi:

---------------------fichero   resultante -------------------------------------------
este es el fi
chero de ejem
plo
es un fichero
 de texto pla
no     que ti
ene varias
lineas y por
linea diferen
te cantidad d
e caracteres
y espacios en
 blanco

---------------------------------------------------------------------------------------------

Es decir, que cada linea tengo como maximo 13 caracteres de longitud, contanto los espacios en blanco... ahy alguna manera de hacerlo en bash ????
Título: Re: SCript BAsh
Publicado por: su - en Viernes 9 de Julio de 2010, 20:10
Si que se pude, una forma es hacerlo con tr (http://unixhelp.ed.ac.uk/CGI/man-cgi?tr+1).
Título: Re: SCript BAsh
Publicado por: xrebeldex en Viernes 9 de Julio de 2010, 20:16
claro estoy seguro que se puede ....

el problema esque no se como hacerlo, lo eh intentado con un for sobre un od -c contando carateres pero no me cuenta los saltos de linea, vamos que no eh podido, ademas ... tr sustituye ... si puedes ponerme un ejemplo ...  esque serua mas facil hacer enter xD ... pero los ficheros de texto que procesamos tienen hasta 20 megas de solo texto ... es decir ... o se automatiza o seria inviable ...
Título: Re: SCript BAsh
Publicado por: su - en Sábado 10 de Julio de 2010, 20:29
Código: Bash
  1. man tr; man paste; man sed
  2.  
Código: Bash
  1. tr -d 'n' < /path/fichero
  2.  
Código: Bash
  1. paste -s -d "" fichero
  2.  

Mas ejemplos:
http://linux.dsplabs.com.au/rmnl-remove ... -ssam-p65/ (http://linux.dsplabs.com.au/rmnl-remove-new-line-characters-tr-awk-perl-sed-c-cpp-bash-python-xargs-ghc-ghci-haskell-sam-ssam-p65/" onclick="window.open(this.href);return false;)
Título: Re: SCript BAsh
Publicado por: xrebeldex en Sábado 17 de Julio de 2010, 05:51
hola, gracias pero lo que estas haciendo en esos casos ( y en los del post ) es quitando el salto de linea, yo lo que quiero es agregarlo.
Título: Re: SCript BAsh
Publicado por: su - en Jueves 22 de Julio de 2010, 02:06
:nosweat: Cierto.
En Bash se puede hacer:
Código: Bash
  1. #!/bin/bash
  2. while read -n13 string; do
  3.     echo $string >> salida.txt
  4. done < fichero.txt
  5.  

En Perl:
Código: Perl
  1. #!/usr/bin/perl
  2. use strict;
  3. open IN, "mi_fichero.txt" or die "Error entrada: $!n";
  4. open OUT, "+>mi_salida.txt" or die "Error salida: $!n";
  5. my $buffer;
  6. while ( read(IN, $buffer, 13) != 0 ) {
  7.     print OUT "$buffern";
  8. }
  9. close OUT;
  10. close IN;
  11.  
  12.