Ubuntun käyttö > Ohjelmointi, palvelimet ja muu edistyneempi käyttö
Awk käskyn käyttö
(1/1)
Duracel:
Terve
Minulla pieni ongelma allaolevan tuloksden perkamisessa.
{"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}
Bodattu numero on kulutus watteina 496.678w ja periaatteessa se voisi näyttää vain sadat ja tuhannet watit.
Allaolevalla komennolla sain jo näin lähelle onnistumaan.
python3 hs100.py 192.168.0.194 9999 emeter|sed -e s/" "//g|awk -F '"' '{print $11}'| tr ',' '\n'
:496678
nm:
Tuo data on JSON-formaatissa. Voit käyttää esimerkiksi Pythonin json-kirjastoa tai jq:ta sen lukemiseen.
SuperOscar:
jq osaa jopa laskeakin, eli tuhannella jako kävisi kätevästi suoraan tällaisella putkella:
--- Koodia: ---komento_joka_sylkee_JSONia | jq '.emeter.get_realtime.power_mw / 1000'
--- Koodi päättyy ---
petteriIII:
Vanha BASH oli tehty ratkaisemaan tämmöisiä tehtäviä salaman-nopeasti - esimerkiksi erottamaan haluttu osa tekstijonosta. Mutta melkolailla BASH:in synnyttyä alettiin ajatella että on kestämätöntä että taviksetkin saavat nopeasti ratkaistua tällaisia tehtäviä - eihän valmis-ohjelmilla olisi silloin mitään tehtävää. Joten BASH:in vanhat käskyt täytyi lähettää unholaan ja tehdä uusi tämmöiseen toimintaan sopimaton käskykanta - mutta onneksi niitä vanhoja käskyjä ei hävitetty.
Ja toistaiseksi kaikissa Ubuntu koneissa pääte-ohjelma osaa BASH:ia halusi tai ei - eikä edes lausetta: !#/bin/bash tarvita. Tässä on käytetty kahta BASH:in tuhansista vanhoista käskyistä. Tämän tehtävän ratkaisu:
--- Koodia: ---apu={"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}
apu=${apu#*mw:*}; echo ${apu%%,*}
--- Koodi päättyy ---
- lainausmerkki pitää jättää valitsevista käskyistä pois. Siis 32 kirjainta koko käsky - helppo soveltaa mihin vain ja lisäksi nopeampi kuin Python - tai useimmat muutkaan. Ja mitä haluaakin niin muutokset skriptiin ovat yksinkertaisia ja toiminta yhtä varmaa kuin parhaimmallakin valmisohjelmalla. Esimerkiksi:
--- Koodia: ---apu={"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}
apu=${apu#*mv:*}; echo ${apu%%,*} # antaa jännitteen kum muuttaa kirjaimen: w kirjaimeksi: v
apu={"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}
apu=${apu#*ma:*}; echo ${apu%%,*} # antaa virran kum muuttaa kirjaimen: w kirjaimeksi: a
apu={"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}
apu=${apu#*wh:*}; echo ${apu%%,*} # antaa tehon kum muuttaa kirjaimet: mw kirjaimiksi: wh
--- Koodi päättyy ---
Navigaatio
[0] Viestien etusivu
Siirry pois tekstitilasta