Script: Añadir prefijo o sufijo a cada linea de archivo / Add prefix or postfix to each line of a file


Supongamos que tenemos un archivo de texto kk.txt con las siguientes lineas:

linea1
linea2
linea3

y queremos agregarle un prefijo a cada línea de ese archivo.

Opción 1: con sed

[hvivani@test ~]$ sed -e 's/^/prefix/' kk.txt
prefixlinea1
prefixlinea2
prefixlinea3

Opción 2: con nl

[hvivani@test ~]$ nl -s prefix kk.txt |cut -c7-
prefixlinea1
prefixlinea2
prefixlinea3

Opción 3: con awk

[hvivani@test ~]$ awk '{print "prefix"$0}' kk.txt 
prefixlinea1
prefixlinea2
prefixlinea3

Opción 4: con shell script

#!/bin/bash
prefix="prefijo"
file="kk.txt"
while read -r line
do
 echo "${prefix}$line"
done <$file > renombrado
mv renombrado $file

Si queremos agregarle un sufijo o postfijo a cada línea de ese archivo:

[hvivani@test ~]$ sed -e 's/$/prefix/' kk.txt
linea1prefix
linea2prefix
linea3prefix

Prefijos de códigos EAN – GS1 por países / Barcode prefix list


Este es un lista de prefijos utilizados en los códigos de barras comerciales EAN13.  Por ejemplo, si tomamos un artículo en el supermercado y miramos el código de barras,  es probable que comience con 779. Todos los productos registrados en Argentina comienzan con 779.

En Argentina, la base de datos de códigos de barras comerciales es regulada y almacenada por GS1.

Siempre viene bien tenerlos a mano…
000 – 019 Estados Unidos y Canadá
020 – 029 Distribución restringida (Definición MO)
03 Estados Unidos (medicamentos)
040 – 049 Distribución restringida (Definición MO)
05 Etiquetados especiales
060 – 099 Estados Unidos y Canadá
100 – 139 Estados Unidos (reservado para futuros usos)
200 – 299 Distribución restringida(Definición MO)
300 – 379 Francia y Mónaco
380 Bulgaria
383 Eslovenia
385 Croacia
387 Bosnia y Herzegovina
389 Montenegro
400 – 440 Alemania (el código 440 pertenecía a la República Democrática Alemana hasta la reunificación en 1990)
45 Japón
46 Rusia
470 Kirguistán
471 República de China
474 Estonia
475 Letonia
476 Azerbaiyán
477 Lituania
478 Uzbekistán
479 Sri Lanka
480 Filipinas
481 Bielorrusia
482 Ucrania
484 Moldavia
485 Armenia
486 Georgia
487 Kazajistán
488 Tayikistán
489 Hong Kong SAR
49 Japón
50 Reino Unido
520 – 521 Grecia
528 Líbano
529 Chipre
530 Albania
531 Macedonia
535 Malta
539 Irlanda
54 Bélgica y Luxemburgo
560 Portugal
569 Islandia
57 Dinamarca, Islas Feroe y Groelandia
590 Polonia
594 Rumania
599 Hungría
600 – 601 Sudáfrica
603 Ghana
604 Senegal
608 Baréin
609 Mauricio
611 Marruecos
613 Argelia
615 Nigeria
616 Kenia
618 Costa de Marfil
619 Túnez
621 Siria
622 Egipto
624 Libia
625 Jordania
626 Irán
627 Kuwait
628 Arabia Saudí
629 Emiratos Árabes Unidos
64 Finlandia
69 República Popular China
70 Noruega
729 Israel
73 Suecia
740 Guatemala
741 El Salvador
742 Honduras
743 Nicaragua
744 Costa Rica
745 Panamá
746 República Dominicana
750 México
754 – 755 Canadá
759 Venezuela
76 Suiza y Liechtenstein
770 – 771 Colombia
773 Uruguay
775 Perú
776 Perú CODIGO UTILIZADO POR DATA CODE PERU – EMPRESA INDEPENDIENTE
777 Bolivia
779 Argentina
780 Chile
784 Paraguay
785 Perú
786 Ecuador
789 – 790 Brasil
800 – 839 Italia, San Marino y Ciudad del Vaticano
84 España y Andorra
850 Cuba
858 Eslovaquia
859 República Checa
860 Serbia
865 Mongolia
867 Corea del Norte
86 Turquía
87 Países Bajos
880 Corea del Sur
884 Camboya
885 Tailandia
888 Singapur
890 India
893 Vietnam
896 Pakistán
899 Indonesia
900 – 919 Austria
93 Australia
94 Nueva Zelanda
950 GS1 Global Office: Aplicaciones Especiales
951 EPCglobal: Aplicaciones Especiales
955 Malasia
958 Macao
96 GS1 Global Office: Localizaciones GTIN-8
977 Publicaciones (ISSN)
978 – 979 Publicaciones (ISBN) – 979-0 usado para música
980 Recibos
981 – 983 Otros etiquetados
99 Etiquetados especiaels

El prefijo 950 (GS1 Global Office) es usado para aplicaciones especiales de acuerdos bilaterales. El prefijo 951 es usado por EPCglobal. Desde el rango 960, los prefijos 9600 a 9604 han sido asignados a GS1 UK para números GTIN-8. Los prefijos que no están nombrados en la lista son usados por GS1 Global Office para países en los que aun no existe una organización GS1 y están reservados para su futuro uso. Los prefijos usados en países no miembros de GS1 y reservados por GS1 para su futuro uso son:

140 – 199
381, 382, 384, 386 & 388
390 – 399
441 – 449
472, 473 & 483
510 – 519
521 – 527
532 – 534 & 536 – 538
550 – 559
561 – 568
580 – 589
591 – 593 & 595 – 598
602 & 605 – 607
610, 612, 614, 617, 620 & 623
630 – 639
650 – 689
696 – 699
747 – 749
751 – 753 & 756 – 758
781 – 783, 785, 787 & 788
791 – 799
851 – 857
861 – 864 & 866
881 – 883, 886, 887 & 889
891, 892, 894, 895, 897 & 898
920 – 929
952 – 954, 956 & 957
959, 961 – 976
984 – 989

Algoritmo para Palindromas o Capicuas en C#


Primera aproximación: Recorriendo toda la cadena.

            Boolean palindroma = true;
            string str = new string(Console.ReadLine().ToCharArray());
            for (int i=0; i < str.Length; i++)
            {
                if (str[i] != str[str.Length-i-1])
                    palindroma = false;
            }
            Console.WriteLine(palindroma.ToString());

Segunda aproximación: Solo evaluamos la mitad de la cadena

            Boolean palindroma = true;
            string str = new string(Console.ReadLine().ToCharArray());
            for (int i=0; i < str.Length; i++)
            {
                if (str[i] != str[str.Length-i-1])
                    palindroma = false;
            }
            Console.WriteLine(palindroma.ToString());

Tercera aproximación: el bucle corta por falso de palindroma.

            string str = new string(Console.ReadLine().ToCharArray());
            for (int i = 0; i < str.Length / 2; i++)
            {
                if (str[i] != str[str.Length - i - 1])
                    return false;
            }
            return true;

Conectando a instancia de Maquina Virtual de Amazon AWS EC2


Hace un tiempo hice unas pruebas con las máquinas virtuales que ofrece Amazon AWS. Hay una opción interesante de servicio gratuito durante un año para pruebas o para ingresar al producto, y por eso me puse a explorar sus alternativas.

Lo que hay que tener muy en cuenta es que, inclusive para probar, hay que ingresar los datos de una tarjeta de crédito (Microsoft Azure hace lo mismo), y luego del año de prueba se comienza a facturar en función de la demanda (ojo con eso).

En el proceso de creación de la instancia de la maquina virtual, debemos crear una clave .pem que luego nos servirá para ingresar al servidor.

Una vez creada la instancia, en el panel de control, debemos localizar la IP o el nombre DNS de dicha instancia.

Pantallazo-15Luego, utilizaremos el certificado .pem descargado al crear la máquina virtual y conectaremos del siguiente modo:

[usuario@host ~]$ ssh -i usuario_aws.pem ec2-user@ec2-54-242-160-64.compute-1.amazonaws.com

Para estas pruebas yo di de alta un Linux RHEL 6.4

Acceder a servidor SQL Server en Servidor Virtual Azure / Connect to SQL Server on Azure Server


Si necesitamos acceder desde un equipo cualquiera a un servidor de base de datos SQL Server hosteado en una máquina virtual Azure, debemos hacer dos cosas en el servidor virtual:

1) Mapear el puerto 1433 para tener acceso al motor de la base de datos.

Esto lo hacemos en el gestor de máquinas virtuales, seleccionando nuestra máquina virtual, luego EndPoints y agregando una nueva regla.

windowsAzure_endpoints

2) Permitir conexiones entrantes al puerto 1433 en el firewall de Windows.

Esto asumo que ya saben como hacerlo, pero basicamente es agregar una regla en Panel de Control –> Firewall, permitiendo la entrada de los paquetes entrantes por TCP al puerto 1433.

Conectar a Servidor SQL Server por puerto no standard / sql server connect to a different port


Este dato es importante (al menos para mí) porque es distinto del criterio utilizado en la mayoría de las aplicaciones.

Si necesitamos conectar a un servidor MS Sql Server a través de un puerto distinto del standard (1433), debemos hacerlo de la siguiente manera:

NOMBRE_SERVIDOR\SQLEXPRESS,14333

Es decir, nombre de servidor, nombre de instancia, coma, numero de puerto.

La intuición me decía hacer NOMBRE_SERVIDOR:1433\SQLEXPRESS. Pero NO.

Esto es aplicable para conexiones desde el SQL Management Studio y también para las cadenas de conexión o connection strings.

C# comportamiento de ComboBox enlazado a datos


Algo de lo que siempre me olvido cada vez que me pongo a tocar código en C# con VS2008.

Cuando creamos un orígen de datos desde un objeto, para luego arrastrar un ComboBox desde Data Sources hacia el formulario, deberemos setear algunas propiedades de datos enlazados a fin de evitar comportamientos extraños en el combo (por ejemplo: no libera el foco al hacer click o inmediatamente luego de cambiar el valor del combo vuelve al valor anterior).

En propiedades–>DataBindings–>Text dejamos en blanco la propiedad.

En propiedades–>DataBindings–>SelectedItem dejamos en blanco la propiedad.

En propiedades–>DataBindings–>SelectedValue establecemos la propiedad al campo del objeto a enlazar.

 

Bloqueo de Gnome Panel


Muchas veces, en equipos que cumplen tareas especiales, es necesario bloquear el panel de gnome a fin de que los usuarios no agreguen o eliminen applets.

Ejecutamos:

$ gconf-editor

y allí, modificamos la siguiente opción:

apps -> panel -> global -> locked_down

Si está tildada esta opción, el panel quedará bloqueado.

Qmail Server: Actualización de Antivirus Clamav por RPM


Para los que tengan un servidor de mail qmail con escaneo de correo por clamav via qmail-scanner, acá va un pequeño ayuda memoria para aquellas ocasiones en que debemos actualizar la versión del antivirus. Esto es algo que debemos revisar cada cierto tiempo, dado que el antivirus puede quedar obsoleto por falta de actualización.

Primero descargamos los RPM de nuestra versión de sistema operativo. Puede ser desde acá:

http://pkgs.repoforge.org/clamav/

Para una instalación eh RHEL 4 de 32 bits, necesitaremos los siguientes paquetes:

clamav-0.97.7-1.el4.rf.i386.rpm

clamav-db-0.97.7-1.el4.rf.i386.rpm

clamav-devel-0.97.7-1.el4.rf.i386.rpm

clamd-0.97.7-1.el4.rf.i386.rpm

Una vez que los tenemos descargados, procedemos:

1) Detenemos qmail y clamd:

# qmailctl stop
# service clamd stop

2) Desinstalamos la version de clamav que tengamos instalada:

2.1) Verificamos las versiones instaladas:

# rpm -qa |grep clam
clamav-devel-0.96.2-2.el4.rf
clamd-0.96.2-2.el4.rf
clamav-db-0.96.2-2.el4.rf
clamav-0.96.2-2.el4.rf

2.2) Desinstalamos:

# rpm -e --nodeps clamd-0.96.2-2.el4.rf 
# rpm -e --nodeps clamav-devel-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-db-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-0.96.2-2.el4.rf

3) Instalamos la nueva versión

# rpm -ivh clamd-0.96.2-2.el4.rf clamav-db-0.96.2-2.el4.rf clamav-0.96.2-2.el4.rf clamd-0.96.2-2.el4.rf

4) Ahora, editamos el /etc/clamd.conf y en la linea donde dice:

User clamav

modificamos por

User qscand

5) Ahora, editamos el /etc/freshclam.conf y en la linea donde dice:

DatabaseOwner clamav

modificamos por

DatabaseOwner qscand

Esto es para que utilice el usuario del qmail-scanner para el antivirus. Ojo con algunas instalaciones de Qmailrocks que sugerían utilizar el clamdscan para escanear y consumen enormes cantidades de recursos en el servidor. Gracias JSimpson por esta info.

6) Luego, verificamos los permisos en los archivos que puedan existir de versiones anteriores:

# chown -R qscand:qscand /var/lib/clamav
# chown -R qscand:qscand /var/run/clamav
# chown -R qscand:qscand /var/log/clamav

7) Iniciamos nuevamente los servicios:

# service clamd start 
# qmailctl start

That’s All Folks !

GRUB 2 Cambiando configuración / Change Settings


En Fedora 18, si tenemos instalado el boot dual en un equipo, seguramente nos planteemos como ampliar el tiempo de delay antes del booteo o cuál es el sitema operativo que arranca por defecto.

1) Editamos el archivo de configuración de grub2 en /etc/default/grub

GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=”Windows7(loader) on /dev/sda1
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap nomodeset rd.md=0 rd.dm=0 $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :) vconsole.keymap=fr rd.luks=0 rd.lvm.lv=fedora/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

2) Para que el cambio tenga efecto, debemos ejecutar:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Con este comando podremos ver todas las entradas disponibles para booteo:

# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2

Con este comando podremos ver cuál es la entrada seteada en este momento por defecto:

# grub2-editenv list

Y alternativamente, podríamos utilizar este comando para establecer una determinada entrada por default para booteo:

# grub2-set-default <menu entry title>

Ojo que de todas maneras, deberemos ejecutar el comando del punto 2) para que el cambio tenga efecto.