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
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 "<file>" }
{ if (index($2, "_")<1){
print "<record><ses>"$1 "</ses>\t<proc>" $2 "</proc>\t<stat>" $4 "</stat>\t<stDay>" $5 "</stDay>\t<stHour>" $6 "</stHour>\t<endD>" $7 "</endD>\t<endH>" $8"</endH></record>"
}
}
END{ print "</file>" }
Este programita me esta cogiendo el archivo_a_procesar.txt y lo está tranformando a un xml. al principio pongo el <file> 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 “_”
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 }'