Saya telah berjuang untuk waktu yang lama untuk menulis naskah yang akan memiliki 2 argumen, 1 meminta untuk memilih satu tahun dan 2 meminta untuk memilih apakah saya ingin minimum, maksimum, rata-rata atau semua ditampilkan sebagai baris terakhir dari file terkait ke tahun yang dipilih.
Pada dasarnya, saya memiliki direktori yang berisi subdirektori dari tahun yang berbeda (2000, 2001, 2002, dll.) Di dalam direktori tersebut adalah subdirektori selama berbulan-bulan dan berhari-hari yang berisi (a) file yang menginformasikan tentang populasi (bukan info sebenarnya) dari berbagai kota sebagai baris terakhir. Itu adalah bagian dari pohon direktori:
.
|-- 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
Semua file diformat dengan cara yang sama:
2019-04-03
Wednesday
Newcastle-upon-Tyne
255362
Saya perlu menulis skrip untuk ditanya tahun mana yang saya butuhkan (memilih direktori itu) dan kemudian bertanya apakah saya ingin rata-rata, minimum, maksimum atau semua hal di atas ditampilkan untuk populasi (yang merupakan baris terakhir dari file).
Inilah yang saya miliki sejauh ini:
#!/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
Ini memungkinkan saya memilih direktori, tetapi tidak memberi saya jawaban yang saya butuhkan, hanya meludahi baris terakhir file saya.
sumber
Jawaban:
Jika saya menerapkan ini dalam bash, saya akan melakukan hal berikut. Saya tidak akan berkomentar banyak tentang itu: jangan ragu untuk bertanya pertanyaan khusus - periksa halaman bash man terlebih dahulu jika Anda tidak tahu cara kerja perintah tertentu.
sumber
Saya menulis
awk
skrip sederhana yang melakukan hal yang sama seperti apa yang Anda lakukan:Penjelasan inline:
sumber
Seperti yang ditulis, skrip tidak akan melakukan apa pun selain mencetak populasi karena rata-rata, dll. Dikomentari.
Untuk menghitung rata-rata, populasi tersebut harus dikirim ke fungsi rata-rata () dengan sesuatu seperti ...
Baris serupa akan ditambahkan untuk min () dan max ().
Anda dapat menggunakan
case
pernyataan untuk memanggil fungsi yang sesuai ...The
1|4) echo ...
menyebabkan gema untuk menjalankan jika salah 1 atau 4 dimasukkan. Dengan demikian, ketiganya akan dieksekusi jika 4 dimasukkan.sumber
Terima kasih atas semua jawaban, inilah yang akhirnya saya dapatkan:
Saat memilih opsi (1-4) alih-alih meletakkan angka, kata harus dimasukkan, yang saya benci tetapi diminta melakukannya dengan cara ini.
sumber