Kirjoittaja Aihe: Awk käskyn käyttö  (Luettu 3073 kertaa)

Duracel

  • Käyttäjä
  • Viestejä: 12
    • Profiili
Awk käskyn käyttö
« : 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
« Viimeksi muokattu: 13.01.24 - klo:21.04 kirjoittanut Duracel »

nm

  • Käyttäjä
  • Viestejä: 16427
    • Profiili
Vs: Awk käskyn käyttö
« Vastaus #1 : 13.01.24 - klo:21.12 »
Tuo data on JSON-formaatissa. Voit käyttää esimerkiksi Pythonin json-kirjastoa tai jq:ta sen lukemiseen.

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Awk käskyn käyttö
« Vastaus #2 : 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'
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Awk käskyn käyttö
« Vastaus #3 : 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