jueves, 23 de septiembre de 2010

Comando cut : selección de columnas en archivos

El comando cut permite seleccionar columnas o campos completos en un archivo estructurado ( con campos separados por algún delimitador). El delimitador por defecto de cut es el tabulador

Algunas de las opciones son:
-f permite seleccionar el campo que queremos ver
-d para cambiar el delimitador
-c seleccionar columnas
-s no muestra las lineas que no tienen el delimitador

Supongamos que tenemos el archivo (separado por tabuladores)
1 a 123
5 b 64
2 A 32
3 a 16

- Seleccionamos el segundo campo
cut -f 2 prueba.txt
a
b
A
a

- Seleccionamos los caracteres entre la posición 5 y 6
cut -c5-6 prueba.txt
12
64
32
16

-Si el delimitador fuese una coma podríamos usar -d, o -d','
cut -d, -f 3 prueba2.txt
123
64
32
16

En el caso de usar conjuntamente ls y cut veremos que al tener un numero diferente de espacios en algunos campos (por ejemplo en el tamaño del archivo) no saldrán correctamente y algunas lineas saldrán en blanco.
ls -la | cut -d' ' -f 5

En este caso es mejor optar por otros comandos por ejemplo usando awk:
ls -la | awk '{print $5 }'

martes, 21 de septiembre de 2010

Comando sort : ordenar lineas de texto de un archivo

El comando sort ordena las lineas de un archivo de texto según varios criterios, algunos de las opciones más útiles son:
-n utilizar ordenamiento numérico en lugar de alfanumérico (letras)
-r invertir orden
-f ignora mayúsculas y minúsculas
-k número ordenar usando la columna número
-t nuevoseparador usar como separador el nuevo separador en lugar del separador por defecto. ej -t, o -t","
-u suprime las lineas repetidas ( similar al comando uniq )

Supongamos que tenemos el siguiente archivo ( cat > prueba.txt):
1 a 123
5 b 64
2 A 32
3 a 16

Los siguientes comandos dan las siguientes salidas:
- Ordenación por defecto
sort prueba.txt
1 a 123
2 A 32
3 a 16
5 b 64

- Ordenación usando la tercera columna
sort -k3 prueba.txt
1 a 123
3 a 16
2 A 32
5 b 64

- Orden usando la tercera columna y orden numérico
sort -k3 -n prueba.txt
3 a 16
2 A 32
5 b 64
1 a 123

- Orden usando la segunda columna y orden inverso
sort -k2 -r prueba.txt
5 b 64
2 A 32
3 a 16
1 a 123

-Si por ejemplo el archivo usase como separador la coma (,) la sintaxis sería:
sort -t, -k3 -n prueba2.txt
3,a,16
2,A,32
5,b,64
1,a,123

lunes, 20 de septiembre de 2010

Comando WC : contar palabras, líneas y caracteres de archivos

El comando wc viene de "word count" y es un contador de lineas , palabras (letras separadas por espacios) y caracteres (bytes).
wc archivo.txt
584 14583 123787 archivo.txt

La salida muestra que el archivo tiene 584 lineas , 14583 palabras y 123787 caracteres.
Sus opciones en linea de comandos son:
-c cuenta los bytes
-m cuenta las palabras
-l cuenta las lineas

Por ejemplo, para ver si el numero de registros exportados ( select count(*) from tabla ) es identico al del archivo que hemos exportado contaremos las lineas de dicho archivo
wc - l archivo.txt
584 archivo.txt
Para contar el número de archivos en un directorio podemos usar:
ls -1 | wc -l

sábado, 11 de septiembre de 2010

Gnome : Habilitar iconos en menus y botones

Podemos hace lo de dos formas, desde linea de comando ejecutando:
gconftool-2 --set /desktop/gnome/interface/buttons_have_icons --type bool true
gconftool-2 --set /desktop/gnome/interface/menus_have_icons --type bool true

O gráficamente, ejecutando el "Editor de Configuraciones de Gnome", dentro de Aplicaciones/Sistema.De forma equivalente podemos ejecutar el comando:
gconf-editor

Una vez en el editor buscamos en /desktop/gnome/interface/ y marcamos las opciones
menus_has_icons
buttons_have_icons

Una imagen del editor:



sábado, 4 de septiembre de 2010

Java: rellenar cadena con espacios

A partir java 1.5 podemos usar la funcion String.format() que funciona de un modo similar al printf de C para rellenar con espacios una cadena.

Si queremos rellenar el String micadena de modo que tenga 10 espacios al final de la cadena usaremos la sentencia siguientes:
String micadena = "123";
String nuevacadena = String.format("%1$-10s",micadena);

de modo que genere la cadena "123 ".
Si usásemos la sentencia:
String nuevacadena = String.format("%1$#10s",micadena);

Los espacios se colocarán al principio, obtendremos " 123".

La función puede recibir varios argumentos o repetir el mismo varias veces:
String nuevacadena = String.format("%1$#10s ; %1$-10s, %2$ ",micadena, "hola");

obtenemos " 123 ; 123 , hola"

En cuanto a número podemos controlar la precisión decimal con el .numerodecimales. En el siguiente queremos 2 decimales, así que usamos .2 y la f para indicar que queremos un float:
double numero = 123.23212;
nuevacadena = String.format("número %1$.2f fin",numero);

Obtenemos 123.23

Si queremos 0 a la izquierda, tenemos que tener en cuenta que si especificamos 10 dígitos, hay que descontarle los dígitos decimales (en nuestro ejemplo 2) y la coma.
nuevacadena = String.format("número->%1$010.2f fin",numero);

En este caso le decimos que queremos 10 digitos, 2 decimales, la coma y 7 dígitos que iran a la parte entera. El número resultante es 0000123,23.

Si no especificamos el nº de decimales los 0 se pondrán a la derecha:
nuevacadena = String.format("número->%1$010f fin",numero);

RESULTADO: 123,232120.

Hay muchas más opciones, incluyendo el formato de fechas. Para más información es mejor ver la documentación oficial.

Para obtener más información sobre el formato:
http://download-llnw.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax