Beetaversioon: sisu on enamasti terviklik ja avalikuks katsetamiseks valmis, kuid vajab veel tehnilist, keelelist ja kasutatavuse kontrolli.

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 edasi SQLite'i või Pythoni juurde

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 koosnevad lihtsatest ühetaolistest võtme-väärtuse paaridest

Kõige tavalisemad tööriistad

CSV

Lihtsa CSV puhul on väga kasulikud:

  • head
  • column
  • cut
  • sort
  • wc

Tähtis hoiatus:

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

Seega:

  • kiireks vaatamiseks on shell väga hea
  • keerulise CSV jaoks on parem kasutada Pythonit või selleks mõeldud 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, kuid see 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 võimaldab kiiresti märgendeid otsida
  • xmllint --format teeb struktuuri palju loetavamaks

Kui xmllint puudub, ei ole see üllatav: tööriist ei ole igas süsteemis vaikimisi olemas.

CSV kirje ei pruugi olla üks tekstirida. Jutumärkides välja sees võib olla reavahetus; wc -l loendab reavahetusi, mitte CSV kirjeid. Selliste andmete jaoks kasuta CSV-parserit, mitte cut -d,.

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 keeruka CSV-faili töötlemiseks 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