Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki CSV, JSON ja XML käsureal, mis kuulub osasse Osa V: Arendus ja töövood.

CSV, JSON ja XML käsureal

Selles peatükis vaatame kolme väga levinud andmevormingut ja seda, kuidas neid käsureal kiiresti uurida.

Loogika

Need kolm vormingut esindavad sageli kolme eri mõtteviisi:

  • CSV on tavaliselt lihtne tabel
  • JSON on sageli objektide ja massiivide puu
  • XML on märgenditega puustruktuur

Kui saad aru, millist kuju andmed võtavad, on palju lihtsam otsustada:

  • kas kasutada cut, column ja sort
  • kas võtta appi jq
  • kas minna SQLite'i või Pythoni peale

Oluline praktiline mõte on:

  • käsurida sobib hästi kiireks vaatamiseks
  • keerulisema loogika jaoks on sageli parem minna Pythonisse või SQL-i

Kiirspikker

  • head fail.csv vaata CSV esimesi ridu
  • column -s, -t < fail.csv kuva lihtne CSV tabelina
  • cut -d, -f1 fail.csv võta üks CSV veerg lihtsal juhul
  • python3 -m json.tool fail.json kuva JSON loetavalt
  • jq '.voti' fail.json vali JSON-ist välju
  • grep '<tag>' fail.xml leia XML-ist kiirelt märgendeid
  • xmllint --format fail.xml vorminda XML loetavaks

Kõige tavalisemad tööriistad

CSV

Lihtsa CSV puhul on väga kasulikud:

  • head
  • column
  • cut
  • sort
  • wc

Tähtis hoiatus:

  • päris CSV võib sisaldada jutumärke, komasid välja sees ja reavahetusi
  • siis ei pruugi cut -d, olla enam piisavalt täpne

Seega:

  • kiireks vaatamiseks on shell väga hea
  • päris keerulise CSV jaoks on parem kasutada Pythonit või spetsiaalset tööriista

JSON

JSON on väga levinud:

  • API vastustes
  • seadistusfailides
  • logides
  • veebiteenuste väljundis

Kõige praktilisemad esimesed tööriistad on:

  • python3 -m json.tool
  • jq

Kui jq puudub, saad JSON-i vähemalt ilusti vaadata python3 -m json.tool käsuga.

XML

XML-i kohtab tänapäeval vähem kui JSON-i, aga ta on endiselt oluline:

  • vanemates süsteemides
  • teaduslikes andmevahetustes
  • mõnes konfiguratsioonis
  • dokumentide ja metaandmete juures

Hea algreegel:

  • grep sobib kiireks piilumiseks
  • xmllint sobib ilusaks vorminduseks
  • keerulisema XML loogika jaoks on parem kasutada spetsiaalsemaid tööriistu või Pythonit

Näited

Näide: lihtne CSV


cat > tudengid.csv <<'EOF'
name,city,score
Mari,Tartu,91
Jaan,Tallinn,84
Liis,Narva,88
EOF

Vaatame faili:


head -n 4 tudengid.csv
column -s, -t < tudengid.csv
cut -d, -f1 tudengid.csv

Siin:

  • head näitab algust
  • column muudab lihtsa CSV visuaalselt tabeliks
  • cut -d, -f1 võtab esimese veeru

Näide: lihtne JSON


cat > tudengid.json <<'EOF'
{
  "students": [
    {"name": "Mari", "city": "Tartu", "score": 91},
    {"name": "Jaan", "city": "Tallinn", "score": 84},
    {"name": "Liis", "city": "Narva", "score": 88}
  ]
}
EOF

Vaatame JSON-i:


python3 -m json.tool tudengid.json
jq '.students[].name' tudengid.json

Siin:

  • python3 -m json.tool teeb JSON-i loetavaks
  • jq '.students[].name' käib massiivi läbi ja võtab nimed

Näide: lihtne XML


cat > tudengid.xml <<'EOF'
<students>
  <student city="Tartu">
    <name>Mari</name>
    <score>91</score>
  </student>
  <student city="Tallinn">
    <name>Jaan</name>
    <score>84</score>
  </student>
</students>
EOF

Vaatame XML-i:


grep '<name>' tudengid.xml
xmllint --format tudengid.xml

Siin:

  • grep annab kiire märgendi-põhise piilumise
  • xmllint --format teeb struktuuri palju loetavamaks

Kui xmllint puudub, siis see ei ole üllatav. Ta ei ole igas süsteemis vaikimisi olemas.

Mida meelde jätta

  • CSV on kõige lähemal tabelile
  • JSON sobib hästi pesastatud andmetele
  • XML on samuti puustruktuur, aga märgenditega
  • käsurida sobib väga hästi esimeseks vaatamiseks
  • keerulisem töö läheb sageli edasi SQLite'i, Pythonisse või mõnda teise tööriista

Minitest

  1. Loo üks väike CSV fail kolme reaga ja kuva see column abil tabelina.
  2. Loo üks väike JSON fail ja kuva sellest ainult nimed.
  3. Loo üks väike XML fail ja otsi sellest üks märgend grep abil.
  4. Selgita ühe lausega, miks cut -d, ei pruugi alati päris CSV jaoks piisata.