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

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

Kiirülevaade

Eesmärk on kiiresti ära tunda andmete kuju ja valida selle järgi järgmine tööriist.

Vorming või käskMilleksMida tavaliselt näed
CSVlihtne tabelread ja väljad
JSONobjektide ja massiivide puutaandega struktuur või valitud võtmed
XMLmärgenditega puuelemendid ja pesastatud struktuur
headvaata faili algustesimesed read
columntee lihtne tabel loetavamaksjoondatud veerud
python3 -m json.tool, jqvaata JSON-ivormindatud või filtreeritud JSON
xmllintvorminda XMLloetavam märgendipuu

Tüüpilised algaja vead

  • aetakse segi tabeli, puu ja märgendipõhise struktuuri loogika
  • proovitakse keerukat CSV-d töödelda liiga lihtsa eraldajaloogikaga
  • eeldatakse, et kõik JSON-failid on ühetaolised lihtsad võtme-väärtuse paarid

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.

Lisalugemine

Selle teema usaldusväärsemad viited leiad lisast Lisa E: usaldusväärsed viited ja lisalugemine.

Peatüki täisspikker

Edasijõudnu

Eesmärk

vormingu tüüp ütleb, milline tööriist mõistab andmeid kõige loomulikumalt: tabelit, puud või märgendistruktuuri.

Põhikujud

  • head fail.csvvaata CSV algust
  • column -s, -t < fail.csvjoonda lihtne CSV
  • cut -d, -f1 fail.csvvõta üks veerg
  • python3 -m json.tool fail.jsonvorminda JSON
  • jq '.students[].name' fail.jsonvali JSON välju
  • xmllint --format fail.xmlvorminda XML

Olulised mõisted

  • CSVlihtne tabel
  • JSONobjektide puu
  • XMLmärgendipuu
  • jqJSON filtriks