He estado luchando durante mucho tiempo para escribir un script que tenga 2 argumentos, 1 pidiendo seleccionar un año y 2 pidiendo seleccionar si quiero que se muestre mínimo, máximo, promedio o todo como la última línea de los archivos relacionados al año seleccionado.
Básicamente, tengo un directorio que contiene subdirectorios de diferentes años (2000, 2001, 2002, etc.) en esos directorios son subdirectorios para meses y días que contienen (a) archivos que informan sobre poblaciones (aunque no información real) de diferentes ciudades como la última línea. Esa es una parte del árbol del directorio:
.
|-- 2000
| |-- 01
| | `-- 18
| | `-- ff_1177818640
| |-- 02
| | |-- 02
| | | `-- ff_1669027271
| | |-- 03
| | | `-- ff_234075290
| | |-- 10
| | | `-- ff_1584524530
| | |-- 14
| | | `-- ff_113807345
| | `-- 17
| | `-- ff_1452228827
| |-- 03
| | |-- 06
| | | `-- ff_58914249
| | `-- 11
| | `-- ff_2828212321
| |-- 04
| | `-- 17
| | `-- ff_302131884
| |-- 06
| | `-- 13
| | `-- ff_2175615745
| |-- 07
| | |-- 07
| | | `-- ff_918426998
| | `-- 24
| | `-- ff_2808316425
| |-- 08
| | `-- 27
| | `-- ff_1449825497
| |-- 09
| | `-- 19
| | `-- ff_110255856
| `-- 12
| `-- 08
| `-- ff_1621190
|-- 2001
| |-- 03
| | `-- 21
| | `-- ff_517010375
| |-- 05
| | `-- 27
| | `-- ff_1458621098
| |-- 06
| | |-- 07
| | | `-- ff_155853916
| | |-- 25
| | | |-- ff_2382312387
| | | `-- ff_270731174
| | `-- 29
| | `-- ff_3228522859
| |-- 07
| | `-- 28
| | `-- ff_3215021752
| |-- 09
| | `-- 24
| | `-- ff_1080314364
| `-- 11
| `-- 24
| `-- ff_2313722442
Todos los archivos están formateados de la misma manera:
2019-04-03
Wednesday
Newcastle-upon-Tyne
255362
Necesito escribir un script para que me pregunten qué año necesito (seleccionando ese directorio) y luego preguntando si quiero que se muestre promedio, mínimo, máximo o todo lo anterior para la población (que es la última línea de los archivos).
Esto es lo que tengo hasta ahora:
#!/bin/bash
function min () {
echo $(sort -n populations | head -1)
}
function max () {
echo $(sort -n populations | tail -1)
}
function avg () {
count=0
sum=0
while read line ; do
num='echo ${line#* }'
sum='expr $sum + $num'
count='expr $count + 1'
done < populations
avg='expr $sum / $count'
echo $avg
}
echo "Please enter the year: "
read s1
echo "
Enter an option:
1. Minimum
2. Maximum
3. Average
4. All"
read s2
#echo $s2
for file in $(find ~/filesToSort/$s1 -type f) ; do
tail -1 $file >> populations
done
echo $(cat populations)
#min
#max
#avg
rm populations
Esto me permite elegir directorios, pero no me da las respuestas que necesito, solo escupe las últimas líneas de mis archivos.