Descargen los siguientes archivos :
more es un comando para ver archivos de texto en el terminal. Pruebe los siguientes comandos:
more global_seismicity_feb27-apr19_2010.txt
Aquí tenemos la sismicidad global, de la red global de IRIS, para las primeras semanas después del terremoto magnitud 8.8 en Chile el 2010. Las columnas son (catálogo, día, hora (UTC),latitud, longitud, profundidad, código de la región, código de la zona sísmica, tipo de magnitud, magnitud).
Si no quieres ver todas las líneas de un archivo de texto, se puede usar head o tail. Pruebe lo siguiente:
head global_seismicity_feb27-apr19_2010.txt
tail global_seismicity_feb27-apr19_2010.txt
tail -1 global_seismicity_feb27-apr19_2010.txt
Se puede ejecutar varios comandos en una sola línea usando un "pipe", | , para mandar la salida de la primera operación a una segunda. Cuando introducimos más comandos abajo, vamos a combinarlos usando esta técnica.
awk es una herramienta muy poderosa para manipular datos en columnas. El manual de awk es muy grande, así que aquí mostramos solo algunos ejemplos:
more esk_annual_means.txt | awk '{print NR}'
también se puede notar el número de filas en total:
more global_seismicity_feb27-apr19_2010.txt | awk 'END {print NR}'
more esk_annual_means.txt | awk '{print NF}'
more esk_annual_means.txt | awk '{ if ( NF == 11 ) print $0}'aquí $0 implica toda la línea.
more global_seismicity_feb27-apr19_2010.txt | awk '{print $4, $5, $10}'(en este caso, elegimos el latitud, longitud, y magnitud de los sismos en el catálogo, note que todavía queda un "," entre los valores, podemos sacar eso usando sed (sección 2.6)).
more global_seismicity_feb27-apr19_2010.txt | awk '{print "latitud "$4, "longitud "$5, "magnitud "$10}'
note que dentro el awk, el "," significa un espacio. Podemos obtener el mismo resultado que arriba con:
more global_seismicity_feb27-apr19_2010.txt | awk '{print "latitud",$4, "longitud",$5, "magnitud",$10}'
more esk_annual_means.txt | awk '{ if ( $1 != "Year" && NF == 11 ) print $0}'note que aquí, el condicional dentro del "if" requiere que las líneas tengan 11 columnas, y que la primera columna no se llame Year
more global_seismicity_feb27-apr19_2010.txt | awk '{if ( $10 > 5.5 && $10 <= 6.0 ) print $0}'
more global_seismicity_feb27-apr19_2010.txt | awk '{print "latitud "$4, "longitud "$5, "dist" 6371 -$6}'
more esk_annual_means.txt | awk '{if ( $1 != "Year" && NF == 11 ) print $1, $2 - ($3/60), $5 + ($6/60)}'
more esk_annual_means.txt | awk '{ if ( $1 != "Year" && NF == 11 ) print $1, $2 - ($3 / 60), $5 + ($6 / 60), $10}' > esk_dec_inc_intensidad.txt
more esk_dec_inc_intensidad.txt | awk 'BEGIN{sum=0}{sum+=$4}END{print sum/NR}'
Aquí, BEGIN { } dice que en la primera fila ponga la variable sum igual a cero. En la parte siguiente { } dice que sumamos el valor en la columna cuatro línea por línea. END { } dice lo que debe hacer awk cuando llega a la última fila.
xi) Finalmente, algo que podría servir para reformatear un bloque de datos como0.1 0.2 0.3
0.4 0.5 0.6
0.7 0.8 0.9
en solo una columna de datos se puede usar awk. Suponiendo que el bloque de datos esta
guardado en un archivo llamado datos, se puede usar
more datos | awk '{i=1; while (i < NF+1) {print $i; ++i}}'
para obtener
0.1
0.2
0.3
0.4
etc.
Revisa que se entiende lo que hace este comando!
grep (get regular expression) es un programa que busca patrones en archivos. Solamente las líneas que contienen este patron son mostradas. Por ejemplo, para mostrar los terremotos del catalogo QED/NEIC ponemos:
more global_seismicity_feb27-apr19_2010.txt | grep "QED/NEIC"
Usamos grep con la opción -v para buscar las líneas que no tienen el patrón, por ejemplo:
more global_seismicity_feb27-apr19_2010.txt | grep -v "QED/NEIC"
lo que nos entrega los terremotos que no son de este catálogo.
sed (stream editor) es un programa que puede transformar texto, línea por línea. El formato general es:
sed 's/algo/algo diferente/g'
Por ejemplo, para cambiar las comas en el archivo de los terremotos a estrellas, ponemos:
more global_seismicity_feb27-apr19_2010.txt | sed 's/,/*/g'
Para eliminar las comas, ponemos:
more global_seismicity_feb27-apr19_2010.txt | sed 's/,//g'
more global_seismicity_feb27-apr19_2010.txt | sort -k1
Para ordenar columna 6 (profundidad) del archivo de sismicidad numéricamente tecleamos:
more global_seismicity_feb27-apr19_2010.txt | sort -k6 -g
Para ordenar columna 6 numéricamente, y al revés:
more global_seismicity_feb27-apr19_2010.txt | sort -k6 -g -r
Noten que -n ordena numéricamente, pero si eso no funciona prueba -g (general numeric sort) que es mas lento pero acepta mas formatos para los números, incluyendo exponenciales etc.
more global_seismicity_feb27-apr19_2010.txt |grep "FINGER/NEIC" | sed 's/,//g' | sort -k10 -n | tail -1
Elegir las regiones 134 y 135 en la lista de sismicidad:
more global_seismicity_feb27-apr19_2010.txt | grep "FINGER/NEIC" | sed 's/,//g' | awk '{if ( $7 == 134 || $7 == 135 ) print$0}'
Notar que || dentro del if ( ) significa ``o''.
matt 2014-03-19