Skip to content

Commit 1e17cd0

Browse files
committed
úkoly 4: Bash 2
1 parent 28d76be commit 1e17cd0

1 file changed

Lines changed: 364 additions & 0 deletions

File tree

Lines changed: 364 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,364 @@
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

Comments
 (0)