[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]



----- 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.

>
>Gracias por tu interés.
>
>-- 
>y hasta aquí puedo leer...

Saludos
Guimi
http://www.guimi.net



Reply to: