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