[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [BASH] Detectar una línea en blanco y cortar el fichero [SOLUCIONADO]



El Jueves, 16 de Febrero de 2006 11:24, Guimi escribió:
> ----- Original Message -----
> From: "Iñaki"
>
> >El Martes, 14 de Febrero de 2006 19:06, Raul escribió:
> >> Iñaki wrote:
> >> >Hola, llevo rato con un script que necesito para mañana y no sé por
> >> > dónde cogerlo. Me falta un trocito que debe hacer lo siguiente:
> >> >
> >> >Tengo un fichero que siempre es más o menos así:
> >> >
> >> >-----------------------------------------------------------------------
> >> >- A 1212
> >> >B 2323232323
> >> >C 121212121212121212
> >> >D 21212121212
> >> >
> >> >Received jasjijasd
> >>>
> >>>asd
> >>>asd
> >>>
> >> >as
> >> >da
> >> >
> >> >sd
> >> >asd
> >> >a
> >> >
> >> >sda
> >> >sd
> >> >-----------------------------------------------------------------------
> >> >--- ---
> >> >
> >> >El número de líneas antes de la línea en blanco es variable, así que no
> >> > me sirve "sed" para mi propósito.
>
> Como alguien ya ha dicho ¿seguro? (ver más abajo por favor)
>
> >> >Necesito obtener ese fichero pero quitándole todas las líneas antes de
> >> > la primera línea en blanco (puede que haya más pero sólo debe actuar
> >> > hasta la primera). La cosa es que el archivo quede así:
> >> >
> >> >-----------------------------------------------------------------------
> >> >--- --- Received jasjijasd
> >> >asd
> >> >asd
> >> >as
> >> >da
> >> >
> >> >sd
> >> >asd
> >> >a
> >> >
> >> >sda
> >> >sd
> >> >-----------------------------------------------------------------------
> >> >--- ---
> >> >
> >> >
> >> >Se me ocurre que un script lea línea a línea el fichero y suprima cada
> >> > línea hasta llegar a la primera en blanco (inclusive). Pero el
> >> > problema es que no sé llevarlo a la práctica. ¿Alguien puede
> >> > orientarme un poco? aunque sólo sea una indicación de por dónde tirar
> >> > se lo agradecería mucho.
> >> >
> >> >
> >> >Un saludo a todos.
> >>
> >> Saludos,
> >>
> >>
> >> No se, es esto lo que necesitas?
> >>
> >>  > cat spaces | grep ^[a-Z,0-9]
> >>
> >> A 1212
> >> B 2323232323
> >> C 121212121212121212
> >> D 21212121212
> >> Received jasjijasd
> >> asd
> >> asd
> >> as
> >> da
> >> sd
> >> asd
> >> a
> >> sda
> >> sd
> >
> >Gracias, pero no es lo que necesito, ya que yo quiero que también
> > desaparezcan las líneas anteriroes al primer espacio en blanco.
> >
> >No obstante creo que ya lo tengo:
> >
> >** cuenta_lineas_comienzo.bash **
> >---------------------------------------------------
> >#!/bin/bash
> >
> ># Numero de líneas que habrá que cortar del inicio:
> >num_lineas=0
> >
> >INPUT="valor inicial"
> >
> >while [ "$INPUT" != "" ]; do
> >        read INPUT
> >        let num_lineas++
> >done
> >
> >echo $num_lineas
> >---------------------------------------------------
>
> - Mejorando el primer script (man grep)
>
> Mismo resultado en una linea:
> grep -vn ^[a-Z,0-9] fichero.txt | head -n1 | sed -e 's/://'
> O si lo prefieres:
> cat fichero.txt | grep -vn ^[a-Z,0-9] | head -n1 | sed -e 's/://'
>
> (sigue un pco más abajo)
>
> >Creo otro script que haga:
>  > #> fila_final=$(cat fichero.txt | ./cuenta_lineas_comienzo.bash)
> >
> >Así $fila_final tendrá el último número de línea a eliminar, que ya será
> > un valor fijo y entonces puedo hacer:
> >  cat fichero.txt | sed "1,$fila_final d" > fichero2.txt
>
> - Mejorando el conjunto de dos scripts con uno solo
>
> #!/bin/bash
> numero=`grep -vn ^[a-Z,0-9] fichero.txt | head -n1`
> numero=$(echo $numero | sed s/":"/""/g)
> cat fichero.txt | sed "1,${numero} d"
>
>
> - Mejorando el script único con una sola instrucción (google -> sed
> tutorial delete)
>
> sed '1,/^$/ d' < fichero.txt
>
>
> Habiendo tantos comandos muy útiles, es mejor no reinventar la rueda.
> Para cosas más complejas de tratamiento de ficheros, sigo recomendando
> Perl.
>


Im-presionante.   ;)



-- 
y hasta aquí puedo leer...



Reply to: