====== 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 }'