
Un programa para calcular estadísticas genera sus datos en este formato.
Calc_Statistics -input_data
zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs
1|Category 1|2340|6|0.281038027256727|0.462105994578451|0.181067967321724|0.408569300865444|0.408569300865444|0.0272405706818114|0.000742048691070761|6.66730726564858|956.0521640251|956.0521640251
2|Category 2|1504|11|0.231816699029878|0.428150941850618|0.19633424282074|0.368851480689277|0.368851480689277|0.0237446334053689|0.000563807615555358|6.43745101985139|554.7526269567|554.7526269567
...
...
n
Sé seleccionar los valores que quiero con el corte.
calc_statistics -input_data | cut -f1,2,34 -d'|'
y obtendré algo como esto:
zone|label|non_null_cells|null_cells
1|Category 1|2340|6
2|Category 2|1504|11
Y quiero ejecutarlo para una colección de entradas, por ejemplo:
for year in years:
do
for month in months:
do
calc_statistics -input_data $year$month_data | cut -f1,2,34 -d'|' >> results.txt
done
done
pero puedo ¿cómo puedo agregar en cada línea la variable $año y $mes para que el resultado sea similar al siguiente?
2000|2|1|Category 1|2340|6
2000|2|2|Category 2|1504|11
Respuesta1
Imprímelo por separado. echo
Es bastante bueno tener una opción ( -n
) que hace que se salte la nueva línea final:
for year in years:
do
for month in months:
do
echo -n "$year|$month|"
calc_statistics | cut -f1,2,34 -d'|' >> results.txt
done
done
Alternativamente, páselos calc_statistics
y haga que los imprima también (luego ajuste la cut
llamada apropiadamente). Su ejemplo es un poco extraño, ya que ambos $month
y $year
no se utilizan en absoluto.
EDITAR: Ah, en ese caso podrías usar paste
, pero es mucho más sencillo hacerlo con aplicaciones de edición de texto. En mi caso sed
:
for year in years:
do
for month in months:
do
calc_statistics | cut -f1,2,34 -d'|' | sed "2,$ s/^/$year|$month|/" >> results.txt
done
done
Lo que hace es leer cada línea después de la primera ( 2,$
significa el rango de líneas) y reemplaza el comienzo de la línea ( ^
) con los valores deseados. Todo justo antes de guardar la cadena en el archivo de resultados.