Article View: es.comp.os.linux.programacion
Article #7047Re: Consulta Shell
From: Pascal Bourguignon
Date: Sat, 12 Apr 2003 23:49
Date: Sat, 12 Apr 2003 23:49
76 lines
3688 bytes
3688 bytes
triatlonn@terra.es (Stanley) writes:
> Gracias Pere y Pascal.
>
> He conseguido hacer un bucle que me visualiza las lineas y me dice los
> caracteres por linea. Pero ahora quiero que me cuenta las palabras que
> tienen 1-cararcter 2-caracteres 3-caracteres y m�s caracteres, para
> cada linea.
>
> Que al final me diga:
>
> 1-linea 1c-xx 2c-xx 3c-xx Resto-xx
> 2-linea 1c-xx 2c-xx 3c-xx Resto
> .
> .
> .
>
> Esto es lo que tengo, pero por mas intento no consigo hacerlo, podeis
> darme al guna sugerencia, por favor. Supongo que hay que hacer un
> bucle con wc -c, pero como le digo que para cuando acaba la palabra �
> la l�nea ?�??�?
>
> #!/bin/bash
>
> i=1 #numero de lineas
>
> fichero=$1 #entra fichero
> if [ ! $1 ]
> then
> echo "El fichero no existe"
>
> else
> echo "fichero correcto"
> lineas=`cat $1 | wc -l` #calculo el n�mero de l�neas
> echo "numero de lineas total" $lineas
> while [ $i -le $lineas ]
> do
> t=`head -$i $1 | tail -1 | wc -c`
> echo "en la linea" $i "hay" $t "caracteres"
> i=`expr $i + 1`
> done
> fi
>
>
> El fichero lo entro por par�metro.
>
> Un saludo.
Mejor asi:
#!/bin/bash
fichero="$1" # usa doble-quotes por si el nombre contiene espacios.
if [ -f "$fichero" -a -r "$fichero" ] ; then # man test
echo "fichero correcto"
echo "numero de lineas total" $( cat "$fichero" | wc -l )
# la ventaja de $( ) sobre ` ` es que se puede incluir en si:
# $( echo $( echo toto ) )
i=1
while read linea ; do
echo "en la linea $i hay $( echo "$linea" | wc -c ) characteres."
i=$(( $i + 1 )) # $(( )) lo hace bash el mismo; expr es otro programa
done < "$fichero"
# si no se usa un pipe con el while, bash no hace un subshell
# y las variables dentro del while son las mismas que fuera
# entonces el numero final de linea leidas queda en $(( $i - 1 )):
echo "numero de lineas total: $(( $i - 1 ))"
else
echo "$fichero no es un fichero o no se puede leer."
fi
--
__Pascal_Bourguignon__ http://www.informatimago.com/
----------------------------------------------------------------------
Do not adjust your mind, there is a fault in reality.
Technical Details
Message-ID:
<87u1d3l1jc.fsf@thalassa.informatimago.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.freenet.de!fu-berlin.de!uni-berlin.de!thalassa.informatimago.COM!not-for-mailReferences:
<994c040b.0304111350.414087f7@posting.google.com> <slrnb9ej5k.114.ppujalARROBA@hola.fou.net> <8765pk9w43.fsf@thalassa.informatimago.com> <994c040b.0304121455.65edbb1b@posting.google.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,a25bc7d3540e92c3 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2003-04-12 16:49:45 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.freenet.de!fu-berlin.de!uni-berlin.de!thalassa.informatimago.COM!not-for-mail From: Pascal Bourguignon <spam@thalassa.informatimago.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Consulta Shell Date: 13 Apr 2003 01:49:11 +0200 Organization: informatimago.com Lines: 76 Message-ID: <87u1d3l1jc.fsf@thalassa.informatimago.com> References: <994c040b.0304111350.414087f7@posting.google.com> <slrnb9ej5k.114.ppujalARROBA@hola.fou.net> <8765pk9w43.fsf@thalassa.informatimago.com> <994c040b.0304121455.65edbb1b@posting.google.com> NNTP-Posting-Host: thalassa.informatimago.com (195.114.85.194) Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: fu-berlin.de 1050191384 13378165 195.114.85.194 (16 [41911]) User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50