Ich habe lange Zeit damit gekämpft, ein Skript zu schreiben, das zwei Argumente enthält, von denen eines zur Auswahl eines Jahres und zwei zur Auswahl, ob Minimum, Maximum, Durchschnitt oder alle als letzte Zeile aus den zugehörigen Dateien angezeigt werden sollen auf das gewählte Jahr.
Grundsätzlich habe ich ein Verzeichnis, das Unterverzeichnisse verschiedener Jahre (2000, 2001, 2002 usw.) enthält. In diesen Unterverzeichnissen befinden sich Unterverzeichnisse für Monate und Tage, die (eine) Datei (en) enthalten, die über Populationen (jedoch keine wirklichen Informationen) verschiedener Personen informieren Städte als letzte Zeile. Das ist ein Teil des Verzeichnisbaums:
.
|-- 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
Alle Dateien werden auf die gleiche Weise formatiert:
2019-04-03
Wednesday
Newcastle-upon-Tyne
255362
Ich muss ein Skript schreiben, um zu fragen, welches Jahr ich brauche (Auswahl dieses Verzeichnisses) und dann zu fragen, ob der Durchschnitt, das Minimum, das Maximum oder alle der oben genannten Werte für die Grundgesamtheit angezeigt werden sollen (dies ist die letzte Zeile der Dateien).
Das habe ich bisher:
#!/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
Auf diese Weise kann ich Verzeichnisse auswählen, bekomme aber nicht die Antworten, die ich brauche, sondern spucke nur die letzten Zeilen meiner Dateien aus.