Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Duracel - 13.01.24 - klo:18.44

Otsikko: Awk käskyn käyttö
Kirjoitti: Duracel - 13.01.24 - klo:18.44
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
Otsikko: Vs: Awk käskyn käyttö
Kirjoitti: nm - 13.01.24 - klo:21.12
Tuo data on JSON-formaatissa. Voit käyttää esimerkiksi Pythonin json-kirjastoa tai jq:ta sen lukemiseen.
Otsikko: Vs: Awk käskyn käyttö
Kirjoitti: SuperOscar - 15.01.24 - klo:17.54
jq osaa jopa laskeakin, eli tuhannella jako kävisi kätevästi suoraan tällaisella putkella:

Koodia: [Valitse]
komento_joka_sylkee_JSONia | jq '.emeter.get_realtime.power_mw / 1000'
Otsikko: Vs: Awk käskyn käyttö
Kirjoitti: petteriIII - 24.04.24 - klo:12.22
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: [Valitse]
apu={"emeter":{"get_realtime":{"voltage_mv":232512,"current_ma":2607,"power_mw":496678,"total_wh":1395922,"err_code":0}}}   
apu=${apu#*mw:*}; echo ${apu%%,*} 
- 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: [Valitse]
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