Linux (for data Scientists)
HOGENT toegepaste
informatica
Thomas Parmentier, Andy Van Maele, Bert Van Vreckem
2024-2025
2 gangbare manieren om tekstpatronen te definiëren:
man 7 glob
man 7 regex
Commando uitvoeren op meer dan 1 bestand?
cp a.txt b.doc c.jpg /tmp
cp /media/usbstick/*.jpg ~/Pictures/
Patroon | Betekenis | Voorbeeld |
---|---|---|
? |
Eén willekeurig teken | ls /bin/?? |
* |
Willekeurige string (ook leeg) | ls *.txt ,
ls a* |
[...] |
Elk teken opgesomd tussen
[] |
ls /bin/[A+_]* |
[A-Z] |
Van A t/m Z | ls /bin/*[A-D1-3] |
[!...] |
Niet 1 v/d opgesomde tekens | ls /bin/[!a-z]* |
ls *.md
: toon alle Markdown-bestandenls [A-Z]*.md
: toon alle Markdown-bestanden waarvan de
naam begint met een hoofdletterls [0-9][0-9]-*.md
: toon alle Markdown bestanden
waarvan de naam begint met twee cijfers gevolgd door een streepje
ls /usr/bin/[!a-z]*
: toon alle commando’s die
niet met een kleine letter beginnen
/usr/bin/[
, /usr/bin/7z
, enz.ls -d /usr/share/man/man?
: toon alle directories onder
/usr/share/man
, gevolgd door nog een enkel karakter
man1
, man7
, mann
apt list --installed 'lib*'
: toon alle geïnstalleerde
packages met programmabibliothekenGebruik nooit regex om bestanden te selecteren!
In dit soort gevallen is find
overbodig:
$ ip -br a | awk '{ print $3 }'
127.0.0.1/8
10.0.2.15/24
awk -F: '{print $1,$3}' /etc/passwd
{action}
→ Voer uit voor elke lijn/regex/ { action }
→ Voer enkel uit als regex
overeenkomtcondition { action }
→ Voer enkel uit als voorwaarde
voldaan is{ print }
wordt verondersteldvb. awk -F: '$3 >= 1000' /etc/passwd
BEGIN { ... }
→ Voer 1x uit, vóór verwerken inputEND { ... }
→ Voer 1x uit, na verwerken inputBereken de som van (alle getallen in) kolom 3
s=0
geïmpliceerd!$3
wordt automatisch geïnterpreteerd als getal!FNR
Huidige lijnnummerFS
Field Separator (equivalent van optie
-F
)NF
Number Fields (aantal kolommen)NR
Number of Records (aantal lijnen)OFS
Output Field separatorPrint de laatste kolom:
awk -F: '{print $NF}' /etc/passwd
Bereken het gemiddelde van kolom 3 in een CSV-bestand:
Voorbeeld: users.awk
Uitvoeren met:
$ chmod +x users.awk
$ ./users.awk < /etc/passwd
root 0
bin 1
...
osboxes 1000
Bereken de som van kolommen 2, 3 en 4:
Print de user shells in /etc/passwsd
en tel
hoeveel elk voorkomt
jq is a lightweight and flexible command-line JSON processor.
curl -s 'https://api.github.com/repositories/5101141/commits?per_page=5' | jq
of: jq '.'
(met .
de identity
operator)
curl -s 'https://api.github.com/repositories/5101141/commits?per_page=5' | jq '.[0]'
(in de volgende voorbeelden: enkel het jq
-commando)
jq '.[0] | {message: .commit.message, name: .commit.committer.name}'
|
binnen de
jq
-expressie!.key
haalt het key
-veld op
.commit.message
jq '.[] | {message: .commit.message, name: .commit.committer.name}'
.[]
geeft elk element van de array terug
[]
er rond:jq '[.[] | {message: .commit.message, name: .commit.committer.name}]'
jq '[.[] | {message: .commit.message, name: .commit.committer.name, parents: [.parents[].html_url]}]'