|
| 1 | +# Úkoly – Bash II |
| 2 | + |
| 3 | +## 1. Grepování yamlů |
| 4 | + |
| 5 | +Procvič si příkazy jako `ls`, `wc`, `grep` a jak je spojit dohromady. |
| 6 | + |
| 7 | +Stáhni a rozbal si tyto archivy s informacemi o komunitních akcích: kurzech/srazech PyLadies a srazech Pyvo. |
| 8 | + |
| 9 | + $ wget -O pyladies-cz.zip https://github.com/PyLadiesCZ/pyladies.cz/archive/master.zip |
| 10 | + $ unzip pyladies-cz.zip |
| 11 | + $ wget -O pyvo-data.zip https://github.com/pyvec/pyvo-data/archive/master.zip |
| 12 | + $ unzip pyvo-data.zip |
| 13 | + |
| 14 | +Data si prohlédni a zjisti, co se v nich skrývá za informace. |
| 15 | +Zvlášť doporučuju prohlédnout soubor `pyvo-data-master/series/brno-pyvo/events/2018-10-25-casove.yaml` |
| 16 | +který je použit na stránce [pyvo.cz/brno-pyvo/2018-10/](https://pyvo.cz/brno-pyvo/2018-10/), |
| 17 | +a soubor `pyladies.cz-master/teams/brno.yml` |
| 18 | +který je použit na stránce [pyladies.cz/brno/#team](https://pyladies.cz/brno/#team). |
| 19 | + |
| 20 | +Použij základní shellové příkazy (ne Python) na zodpovězení otázek níže. |
| 21 | +Hledáš jen orientační hodnoty; nemusí to být na 100% přesné. |
| 22 | + |
| 23 | +> [note] |
| 24 | +> YAML soubory by se správně měly číst knihovnou na YAML, aby byla zachována struktura. Ty je ale ber jako "čistý text", kde hledané informace jsou na řádcích ve tvaru `klíč: hodnota` (případně s nějakýma mezerama a/nebo pomlčkama navíc). |
| 25 | +> Proto odpovědi nemusí být na 100% přesné. |
| 26 | +> |
| 27 | +> "Zakomentované" informace (začínající `#`) můžeš pro jednoduchost počítat |
| 28 | +> taky. (I když jich je po COVIDu často víc než těch nezakomentovaných.) |
| 29 | +
|
| 30 | + |
| 31 | +1. Kolik bylo Pyv v Brně? |
| 32 | + * *Pro každý sraz existuje soubor.* |
| 33 | +--- |
| 34 | +🟢 **Odpověď:** |
| 35 | + |
| 36 | + cd pyvo-data-master/series/brno-pyvo/events |
| 37 | + find . -name '*.yaml' | wc -l |
| 38 | + |
| 39 | + 163 |
| 40 | +--- |
| 41 | +2. Kolik bylo Pyv celkem? |
| 42 | +--- |
| 43 | +🟢 **Odpověď:** |
| 44 | + |
| 45 | + cd pyvo-data-master/series |
| 46 | + find . -name '20*.yaml' | wc -l |
| 47 | + |
| 48 | + 599 |
| 49 | +--- |
| 50 | +3. Z kolika přednášek na Pyvech jsou videa? *(Předpokládej že každá přednáška může mít max. 1 video)* |
| 51 | + * *Videa jsou označena `video:`* |
| 52 | +--- |
| 53 | +🟢 **Odpověď:** |
| 54 | + |
| 55 | + cd pyvo-data-master/series |
| 56 | + grep -e '-video' */events/20*.yaml | wc -l |
| 57 | + |
| 58 | + 438 |
| 59 | +--- |
| 60 | +4. Kolik bylo kurzů/srazů PyLadies? |
| 61 | + * *Srazy jsou v adresáři `meetups/` a každý má jméno, `name:`* |
| 62 | +--- |
| 63 | +🟢 **Odpověď:** |
| 64 | + |
| 65 | + cd pyladies.cz-master/meetups |
| 66 | + grep -e '- name' *.yml | wc -l |
| 67 | + |
| 68 | + 162 |
| 69 | +--- |
| 70 | +5. (Bonusová výzva) Z kolika Pyv jsou videa? |
| 71 | +--- |
| 72 | +🟢 **Odpověď:** |
| 73 | + |
| 74 | + cd pyvo-data-master/series |
| 75 | + grep -l "video" */events/20*.yaml | wc -l |
| 76 | + |
| 77 | + 148 |
| 78 | +--- |
| 79 | +### Nápověda |
| 80 | + |
| 81 | +Šablonami jako `adresar/*/podadresar/*` můžeš vybrat soubory z více adresářů. |
| 82 | + |
| 83 | +Příkaz `grep` má zajímavé přepínače `-r`, `-l`/`-L`, `-h`/`-H` a `-e`. |
| 84 | + |
| 85 | +## 2. Uniq |
| 86 | + |
| 87 | +Příkaz `uniq` odstraní *po sobě jdoucí* duplikované řádky: |
| 88 | + |
| 89 | +```text |
| 90 | +$ echo ' |
| 91 | +> jedna |
| 92 | +> dva |
| 93 | +> dva |
| 94 | +> tři |
| 95 | +> tři |
| 96 | +> tři |
| 97 | +> jedna |
| 98 | +> ' | uniq |
| 99 | +
|
| 100 | +jedna |
| 101 | +dva |
| 102 | +tři |
| 103 | +jedna |
| 104 | +
|
| 105 | +``` |
| 106 | + |
| 107 | +Často se používá `sort | uniq`, aby se stejné řádky z celého souboru dostaly k sobě. |
| 108 | + |
| 109 | +Použij `uniq` k zodpovězení těchto otázek: |
| 110 | + |
| 111 | +6. Vypiš všechna místa konání Pyv (stačí mít v rámci každého řádku identifikátor jako `artbar`). |
| 112 | +--- |
| 113 | +🟢 **Odpověď:** |
| 114 | + |
| 115 | + cd pyvo-data-master/series |
| 116 | + grep -h -o 'venue:[[:space:]]*.*' */events/20*.yaml | sort | uniq | grep -o '[^[:space:]]*$' |
| 117 | + |
| 118 | + acko |
| 119 | + alvi |
| 120 | + andini |
| 121 | + artbar |
| 122 | + avu |
| 123 | + baroko |
| 124 | + beer-factory |
| 125 | + beskydsky-pivovarek |
| 126 | + botic-restaurant |
| 127 | + cafe-falk |
| 128 | + cafe-lajka |
| 129 | + coolarna |
| 130 | + crosscafe |
| 131 | + cyrils-pub |
| 132 | + depo |
| 133 | + edunesto |
| 134 | + etaz |
| 135 | + frankies |
| 136 | + hlavni-nadrazi |
| 137 | + hnizdo-snu |
| 138 | + holesovicka-sachta |
| 139 | + hub-20 |
| 140 | + h55 |
| 141 | + impact-hub |
| 142 | + ires-sc |
| 143 | + jama |
| 144 | + jiraskovy-sady |
| 145 | + kavarna-liberal |
| 146 | + kaverna |
| 147 | + kolocava |
| 148 | + konvikt |
| 149 | + kravi-hora |
| 150 | + local-lokal-industry-pub |
| 151 | + lumir |
| 152 | + luzanky |
| 153 | + moving-station |
| 154 | + na-hradbach |
| 155 | + na-venecku |
| 156 | + palouk |
| 157 | + park-bozetechova |
| 158 | + picolo-piratske-centrum-olomouc |
| 159 | + pivnice-doga |
| 160 | + pivon |
| 161 | + pivovarske-domy |
| 162 | + raven-pub-bolevec |
| 163 | + raven-pub-city |
| 164 | + reset-point |
| 165 | + restaurace-a-penzion-u-salzmannu |
| 166 | + selepka |
| 167 | + sklipek-kiwi-com |
| 168 | + snyt |
| 169 | + sport-club |
| 170 | + the-pub-dejvice |
| 171 | + tyrsuv-sad |
| 172 | + u-drevaka |
| 173 | + u-dreveneho-orla |
| 174 | + u-kachnicky |
| 175 | + u-morice |
| 176 | + u-prejezdu |
| 177 | + u-ptaka |
| 178 | + u-travise |
| 179 | + vila-stvanice |
| 180 | + vinograf |
| 181 | + v-lochu |
| 182 | + vr-levsky |
| 183 | + zivo-u-palecka |
| 184 | + 2to2 |
| 185 | + |
| 186 | +--- |
| 187 | +7. Přidej informaci o tom, kolikrát na kterém místě Pyvo bylo. |
| 188 | + |
| 189 | +Příkaz `uniq` má zajímavý přepínač `-c`. |
| 190 | + |
| 191 | +--- |
| 192 | +🟢 **Odpověď:** |
| 193 | + |
| 194 | + cd pyvo-data-master/series |
| 195 | + grep -h -o 'venue:[[:space:]]*.*' */events/20*.yaml | grep -o '[^[:space:]]*$' | sort | uniq -c |
| 196 | + |
| 197 | + 1 acko |
| 198 | + 2 alvi |
| 199 | + 2 andini |
| 200 | + 53 artbar |
| 201 | + 1 avu |
| 202 | + 2 baroko |
| 203 | + 13 beer-factory |
| 204 | + 1 beskydsky-pivovarek |
| 205 | + 1 botic-restaurant |
| 206 | + 2 cafe-falk |
| 207 | + 3 cafe-lajka |
| 208 | + 29 coolarna |
| 209 | + 1 crosscafe |
| 210 | + 3 cyrils-pub |
| 211 | + 4 depo |
| 212 | + 1 edunesto |
| 213 | + 1 etaz |
| 214 | + 2 frankies |
| 215 | + 1 hlavni-nadrazi |
| 216 | + 2 hnizdo-snu |
| 217 | + 5 holesovicka-sachta |
| 218 | + 4 hub-20 |
| 219 | + 2 h55 |
| 220 | + 1 impact-hub |
| 221 | + 1 ires-sc |
| 222 | + 1 jama |
| 223 | + 1 jiraskovy-sady |
| 224 | + 2 kavarna-liberal |
| 225 | + 9 kaverna |
| 226 | + 13 kolocava |
| 227 | + 1 konvikt |
| 228 | + 1 kravi-hora |
| 229 | + 1 local-lokal-industry-pub |
| 230 | + 2 lumir |
| 231 | + 12 luzanky |
| 232 | + 1 moving-station |
| 233 | + 2 na-hradbach |
| 234 | + 134 na-venecku |
| 235 | + 16 palouk |
| 236 | + 1 park-bozetechova |
| 237 | + 16 picolo-piratske-centrum-olomouc |
| 238 | + 5 pivnice-doga |
| 239 | + 1 pivon |
| 240 | + 22 pivovarske-domy |
| 241 | + 17 raven-pub-bolevec |
| 242 | + 1 raven-pub-city |
| 243 | + 1 reset-point |
| 244 | + 5 restaurace-a-penzion-u-salzmannu |
| 245 | + 1 selepka |
| 246 | + 10 sklipek-kiwi-com |
| 247 | + 1 snyt |
| 248 | + 4 sport-club |
| 249 | + 1 the-pub-dejvice |
| 250 | + 1 tyrsuv-sad |
| 251 | + 28 u-drevaka |
| 252 | + 4 u-dreveneho-orla |
| 253 | + 1 u-kachnicky |
| 254 | + 6 u-morice |
| 255 | + 1 u-prejezdu |
| 256 | + 27 u-ptaka |
| 257 | + 1 u-travise |
| 258 | + 3 vila-stvanice |
| 259 | + 1 vinograf |
| 260 | + 1 v-lochu |
| 261 | + 62 vr-levsky |
| 262 | + 1 zivo-u-palecka |
| 263 | + 1 2to2 |
| 264 | + |
| 265 | + --- |
| 266 | +### Bonusová výzva |
| 267 | + |
| 268 | +Existuje zajímavý příkaz `cut`, který má zajímavé přepínače `-d` a `-f`. |
| 269 | + |
| 270 | +8. Jaké jsou 3 nejčastější křestní jména organizátorů/koučů/atd. PyLadies? |
| 271 | +--- |
| 272 | +🟢 **Odpověď:** |
| 273 | + |
| 274 | + cd pyladies.cz-master/teams |
| 275 | + cat *.yml | grep -- "- name:" |cut -d' ' -f3 | sort | uniq -c | sort -n -r | head -n3 |
| 276 | + |
| 277 | + 8 Tomáš |
| 278 | + 7 Petr |
| 279 | + 6 Veronika |
| 280 | +--- |
| 281 | +## 3. Zástupné znaky (zkus z hlavy) |
| 282 | + |
| 283 | +Sam má následující soubory: |
| 284 | + |
| 285 | +``` |
| 286 | +. |
| 287 | +├── 2015-10-23-calibration.txt |
| 288 | +├── 2015-10-23-dataset1.txt |
| 289 | +├── 2015-10-23-dataset2.txt |
| 290 | +├── 2015-10-23-dataset_overview.txt |
| 291 | +├── 2015-10-26-calibration.txt |
| 292 | +├── 2015-10-26-dataset1.txt |
| 293 | +├── 2015-10-26-dataset2.txt |
| 294 | +├── 2015-10-26-dataset_overview.txt |
| 295 | +├── 2015-11-23-calibration.txt |
| 296 | +├── 2015-11-23-dataset1.txt |
| 297 | +├── 2015-11-23-dataset2.txt |
| 298 | +├── 2015-11-23-dataset_overview.txt |
| 299 | +├── backup |
| 300 | +│ ├── calibration |
| 301 | +│ └── datasets |
| 302 | +└── send_to_bob |
| 303 | + ├── all_datasets_created_on_a_23rd |
| 304 | + └── all_november_files |
| 305 | +``` |
| 306 | + |
| 307 | +Doplň následující příkazy... |
| 308 | + |
| 309 | + |
| 310 | +--- |
| 311 | +🟢 **Odpověď:** |
| 312 | + |
| 313 | + ```console |
| 314 | + $ cp *dataset* backup/datasets |
| 315 | + $ cp *calibration* backup/calibration |
| 316 | + $ cp 2015-11-* send_to_bob/all_november_files/ |
| 317 | + $ cp 2015-*-23* send_to_bob/all_datasets_created_on_a_23rd/ |
| 318 | + ``` |
| 319 | +--- |
| 320 | +... aby výsledek vypadal takhle: |
| 321 | + |
| 322 | +``` |
| 323 | +. |
| 324 | +├── 2015-10-23-calibration.txt |
| 325 | +├── 2015-10-23-dataset1.txt |
| 326 | +├── 2015-10-23-dataset2.txt |
| 327 | +├── 2015-10-23-dataset_overview.txt |
| 328 | +├── 2015-10-26-calibration.txt |
| 329 | +├── 2015-10-26-dataset1.txt |
| 330 | +├── 2015-10-26-dataset2.txt |
| 331 | +├── 2015-10-26-dataset_overview.txt |
| 332 | +├── 2015-11-23-calibration.txt |
| 333 | +├── 2015-11-23-dataset1.txt |
| 334 | +├── 2015-11-23-dataset2.txt |
| 335 | +├── 2015-11-23-dataset_overview.txt |
| 336 | +├── backup |
| 337 | +│ ├── calibration |
| 338 | +│ │ ├── 2015-10-23-calibration.txt |
| 339 | +│ │ ├── 2015-10-26-calibration.txt |
| 340 | +│ │ └── 2015-11-23-calibration.txt |
| 341 | +│ └── datasets |
| 342 | +│ ├── 2015-10-23-dataset1.txt |
| 343 | +│ ├── 2015-10-23-dataset2.txt |
| 344 | +│ ├── 2015-10-23-dataset_overview.txt |
| 345 | +│ ├── 2015-10-26-dataset1.txt |
| 346 | +│ ├── 2015-10-26-dataset2.txt |
| 347 | +│ ├── 2015-10-26-dataset_overview.txt |
| 348 | +│ ├── 2015-11-23-dataset1.txt |
| 349 | +│ ├── 2015-11-23-dataset2.txt |
| 350 | +│ └── 2015-11-23-dataset_overview.txt |
| 351 | +└── send_to_bob |
| 352 | + ├── all_datasets_created_on_a_23rd |
| 353 | + │ ├── 2015-10-23-dataset1.txt |
| 354 | + │ ├── 2015-10-23-dataset2.txt |
| 355 | + │ ├── 2015-10-23-dataset_overview.txt |
| 356 | + │ ├── 2015-11-23-dataset1.txt |
| 357 | + │ ├── 2015-11-23-dataset2.txt |
| 358 | + │ └── 2015-11-23-dataset_overview.txt |
| 359 | + └── all_november_files |
| 360 | + ├── 2015-11-23-calibration.txt |
| 361 | + ├── 2015-11-23-dataset1.txt |
| 362 | + ├── 2015-11-23-dataset2.txt |
| 363 | + └── 2015-11-23-dataset_overview.txt |
| 364 | +``` |
0 commit comments