This shows you the differences between two versions of the page.
|
uso:laboratoare:new:06-auto:basics [2019/11/07 10:11] adrian.zatreanu [cut & awk] |
uso:laboratoare:new:06-auto:basics [2019/11/12 08:11] (current) maria.mihailescu [Expresii regulate] Fix regex |
||
|---|---|---|---|
| Line 102: | Line 102: | ||
| CHIȚESCU E. Bogdan-Florentin 315CC 9 7.75 6.89 | CHIȚESCU E. Bogdan-Florentin 315CC 9 7.75 6.89 | ||
| </code> | </code> | ||
| - | Observăm, însă, că se face match și pe șirul ''Fl.'' și pe șirul ''F.'' reprezentând inițiale. Știm că un prenume conține doar litere mici și că **nu** se încheie cu punct (''.'', //dot//). Atunci extindem expresia regulată de mai sus la expresia ''%%[ -]F[a-z]+[^\.]%%''. Expresia regulată face match pe un șir care: | + | Observăm, însă, că se face match și pe șirul ''Fl.'' și pe șirul ''F.'' reprezentând inițiale. Știm că un prenume conține doar litere mici și că **nu** se încheie cu punct (''.'', //dot//). Atunci extindem expresia regulată de mai sus la expresia ''%%[ -]F[a-z]\+[^\.]%%''. Expresia regulată face match pe un șir care: |
| * începe cu unul dintre caracterele spațiu (//blank//) sau minus (''-''); | * începe cu unul dintre caracterele spațiu (//blank//) sau minus (''-''); | ||
| * continuă cu litera ''F'' (majusculă) | * continuă cu litera ''F'' (majusculă) | ||
| Line 332: | Line 332: | ||
| === Constructia while read === | === Constructia while read === | ||
| + | |||
| + | Creați un nou script ''extract-name'' cu conținutul de mai jos: | ||
| + | <file Bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | IFS=',' | ||
| + | while read name group final_grade test_grade practical_grade; do | ||
| + | echo "$name" | ||
| + | done < students.csv | ||
| + | </file> | ||
| Pentru parsare în shell folosim construcția ''%%while read ...%%''. Construcția este urmată de numele variabilelor în care vom reține câmpurile parsate din cadrul fiecărei linii. Folosim la intrare fișierul ''students.csv'' aflat în directorul părinte; este un fișier în format CSV (//Comma Separated Values//) folosind ca separator caracterul virgulă ('','', //comma//). Pentru a extrage doar numele studenților din fișierul de intrare vom rula scriptul ''extract-name'':<code> | Pentru parsare în shell folosim construcția ''%%while read ...%%''. Construcția este urmată de numele variabilelor în care vom reține câmpurile parsate din cadrul fiecărei linii. Folosim la intrare fișierul ''students.csv'' aflat în directorul părinte; este un fișier în format CSV (//Comma Separated Values//) folosind ca separator caracterul virgulă ('','', //comma//). Pentru a extrage doar numele studenților din fișierul de intrare vom rula scriptul ''extract-name'':<code> | ||
| Line 353: | Line 363: | ||
| Informații și pe [[http://en.wikipedia.org/wiki/Internal_field_separator|Wikipedia]]. | Informații și pe [[http://en.wikipedia.org/wiki/Internal_field_separator|Wikipedia]]. | ||
| </spoiler> | </spoiler> | ||
| - | |||
| - | Să extindem scriptul pentru a afișa și numele și grupa. Conținutul noului script va fi: | ||
| - | <file Bash> | ||
| - | #!/bin/bash | ||
| - | |||
| - | IFS=',' | ||
| - | while read name group final_grade test_grade practical_grade; do | ||
| - | echo "$name,$group" | ||
| - | done < students.csv | ||
| - | </file> | ||
| Pașii de mai sus puteau fi realizați și cu ajutorul comenzii ''cut''. Dar, în cazul parsării folosind construcția ''while read'' avem două avantaje: | Pașii de mai sus puteau fi realizați și cu ajutorul comenzii ''cut''. Dar, în cazul parsării folosind construcția ''while read'' avem două avantaje: | ||