Mailinglist Archive: opensuse-es (1527 mails)

< Previous Next >
Re: [opensuse-es] Mostrar lineas de un fichero
  • From: Oscar Curero <oscar-listas@xxxxxxxxxxxx>
  • Date: Fri, 7 Nov 2008 20:55:21 +0100
  • Message-id: <200811072055.23405.oscar-listas@xxxxxxxxxxxx>
Gerardo Herzig vàreu escriure:
Oscar Curero wrote:
Hola,

Seguro que hay alguna pequeña utilidad para hacer lo que busco, pero soy
incapaz de encontrarlo.

¿Sabéis cómo se pueden mostrar algunas lineas de un fichero (por ej: las
lineas 3,7,9 de un fichero de 50 lineas) en un shell script?

Si lo hago con un bucle pierde mucho tiempo. He probado con "sed", pero
sólo funciona si las lineas son contiguas.

Gracias!

Mi version en awk fallo miserablemente, asi que aqui va mi version en
python

gherzig@comechingon:~> cat algunaslineas.py
#! /usr/bin/python
import sys
archivo = sys.argv[1]
lineas = sys.argv[2:]
print ''.join([x[1] for x in enumerate(open(archivo).xreadlines()) if
str(x[0]+1) in lineas])


gherzig@comechingon:~> chmod 755 algunaslineas.py
gherzig@comechingon:~> ./algunaslineas.py /etc/passwd 1 2 16
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
avahi:x:103:105:User for Avahi:/var/run/avahi-daemon:/bin/false
polkituser:x:104:106:PolicyKit:/var/run/PolicyKit:/bin/false


Mi propuesta:

oscar@hedera:~> cat lineas2.sh
#!/bin/bash
for numline in $2
do
sed -n "$numline p" "$1"
done

oscar@hedera:~> time ./lineas2.sh /etc/services "3 6 9 1"
#
# even if the protocol doesn't support UDP operations.
# http://www.iana.org/assignments/port-numbers
#

real 0m0.618s
user 0m0.580s
sys 0m0.016s

La tuya:

oscar@hedera:~> time ./lineas.py /etc/services 3 6 9 1
#
#
# even if the protocol doesn't support UDP operations.
# http://www.iana.org/assignments/port-numbers


real 0m0.139s
user 0m0.116s
sys 0m0.020s

Con tu permiso, me quedo la tuya :)


Saludos.
Gerardo

Saludos,
--
Oscar Curero - Linux user: 306877
-- GPG keyID: 0xE0EA0B24 --
--
Para dar de baja la suscripción, mande un mensaje a:
opensuse-es+unsubscribe@xxxxxxxxxxxx
Para obtener el resto de direcciones-comando, mande
un mensaje a:
opensuse-es+help@xxxxxxxxxxxx

< Previous Next >