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@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org