====== AWK ======
===== Explicación =====
Awk es un procesador de textos por linea de comando.
Una vez que aprendes su funcionamiento básico resulta de lo más útil.
La estructura básica es la siguiente:
awk '{accion}' fichero
o en su defecto, si queremos que procese algo que tenemos de la linea de comandos...
echo "uno dos tres" | awk '{ accion}'
Awk procesa la entrada linea a linea. Coge lo que le llega, lee una linea y realiza la accion que le mandas. Cada linea está a su vez dividia en campos. El delimitador de campo suele ser el espacio en blanco aunque lo puedes modificar con -F . De este modo cada campo de cada linea está representado por la variable $n(umero).
por ejemplo...
echo "uno dos tres cuatro" | awk '{ print $1 $3}'
imprime...
unotres
osea... el campo 1 y el campo 3
para el caso del ejemplo del fichero sería...
awk '{ print "primera palabra de la linea " $1 }' fichero.txt
y obtendríamos...
primera palabra de la linea primera
primera palabra de la linea segunda
primera palabra de la linea tercera
etc
==== Funciones ====
Conforme vamos avanzando se complica mas la cosa.
podemos querer procesar un poco mas ... para eso estan las funciones y los ficheros que guardan las rutinas. Si en vez de escribir en la consola queremos guardar nuestro procesamiento en un fichero tambien lo podemos hacer. Por convencion yo voy a nombrar todos mis ficheros con procesos awk con la extensión .awk... simple..¿no?
para invocar awk con un fichero se hace de esta manera:
awk -f proc.awk fichero_a_procesar.txt
todos los procesos awk responden a este esquema:
BEGUIN{ cosas que haces al principio}
acciones
acciones
END{ cosas que haces al final}
una vez que sabemos esto... saber que awk nos da las estructuras de control clásicas y básicas:
if( condicion ){
instruccions instruccions
}
[ else {
instruccions
} ]
por ejemplo....
BEGIN{ print "" }
{ if (index($2, "_")<1){
print ""$1 "\t" $2 "\t" $4 "\t" $5 "\t" $6 "\t" $7 "\t" $8""
}
}
END{ print "" }
Este programita me esta cogiendo el archivo_a_procesar.txt y lo está tranformando a un xml. al principio pongo el y despues voy cogiendo los campos que me interesan, es decir la primera, segunda, cuarta ... etc palabra del fichero_a_procesar. Pero no quiero todas las lineas. Quiero sólo aquellas en la que en la segunda palabra no haya un "_"
===== awk escribir el último trozo =====
Si tienes una cadena de la que te interesa sólo el último trozo esta es una manera de cortarla
echo $a | awk -F/ '{ print $NF }'