Estrarre dati da un file

Se avete dubbi o domande sulla programmazione in generale, fatele qui
Rispondi
Avatar utente
ambro
Robin Hood
Messaggi: 1933
Iscritto il: 27 agosto 2009, 21:37
Località: Verona

Estrarre dati da un file

Messaggio da ambro » 12 aprile 2014, 15:12

Ho un problemino.
Vorrei estrarre la quantità di dati utilizzata della mia connessione a internet e la data del prossimo azzeramento per inserirli in conky. I dati li posso salvare in un file con il comando links.
In pratica partendo da questo file https://dl.dropboxusercontent.com/u/202 ... tieolo.txt vorrei estrarre in due variabili distinte il numero 22320659 e la data 22/04/2014 . Poi il resto dovrei riuscire... spero :oops:
Ho provato con sed ma ho fatto solo dei gran casini.

Grazie a chiunque mi aiuti.

Andrea
PC: Amd FX-6100-Nvidia GT630-SSD- 64bit - kernel 4.3-ck - KDE Plasma 5
Mediacenter: Asrock Q2900 Itx - VGA Intel - 64bit - kernel 4.3-ck - lxde - Kodi - isengard
Netbook: Asus eeepc1001 - i686 - kernel 4.3 - lxde

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Estrarre dati da un file

Messaggio da 4javier » 12 aprile 2014, 15:46

Sicuro che la struttura del file sia sempre questa? Mi pare strano che vada a mettere "quota" su un rigo ed il suo valore su un altro.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Avatar utente
ambro
Robin Hood
Messaggi: 1933
Iscritto il: 27 agosto 2009, 21:37
Località: Verona

Re: Estrarre dati da un file

Messaggio da ambro » 12 aprile 2014, 15:57

La struttura mi sembra sempre rispettata.
Se io visualizzo il link

Codice: Seleziona tutto

https://care.ngi.it/ws/ws.asp?a=get.quota
lo visualizzo in un'altra maniera.

Ma se do

Codice: Seleziona tutto

links -dump https://care.ngi.it/ws/ws.asp?a=get.quota > datieolo.txt
ottengo un file sempre formattatato in quel modo. (Naturalmente cambiano i valori... :D )
PC: Amd FX-6100-Nvidia GT630-SSD- 64bit - kernel 4.3-ck - KDE Plasma 5
Mediacenter: Asrock Q2900 Itx - VGA Intel - 64bit - kernel 4.3-ck - lxde - Kodi - isengard
Netbook: Asus eeepc1001 - i686 - kernel 4.3 - lxde

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Estrarre dati da un file

Messaggio da 4javier » 12 aprile 2014, 17:21

non è che se lanci il comando da un terminale di dimensione differente, ottieni una formattazione differente?
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

marcphemt
Novello Arciere
Messaggi: 121
Iscritto il: 11 dicembre 2012, 23:46

Re: Estrarre dati da un file

Messaggio da marcphemt » 12 aprile 2014, 19:49

Penso che, se la formattazione rimane quella, puoi operare con awk...
Ho fatto una prova con

Codice: Seleziona tutto

awk '/nextReset/ {print $3}' ~/test.txt
e mi da la data...perciò per avere anche la quota di dati usata (penso sia quello il significato del numero..) basterebbe

Codice: Seleziona tutto

awk '/used/ {print $10}' ~/test.txt
Edit..per avere una formattazione migliore io darei anche un comando sed:

Codice: Seleziona tutto

sed -e 's/{//g' -e 's/}//g' -e 's/,//g'
oppure, unirei con un pipe a awk

Codice: Seleziona tutto

sed -e 's/,//g' -e 's/"//g'
Questo dovrebbe funzionare:

Codice: Seleziona tutto

#! /bin/bash
awk '/nextReset/ {print $3}' ~/test.txt | sed -e 's/,//g' -e 's/"//g'
awk '/used/ {print $10}' ~/test.txt | sed -e 's/,//g' -e 's/"//g'

Avatar utente
TheSaint
Robin Hood
Messaggi: 7930
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Estrarre dati da un file

Messaggio da TheSaint » 13 aprile 2014, 4:54

@ambro
quello del file è un semplice dizionario python, o JSON data.
Prova:

Codice: Seleziona tutto

echo "import urllib.request
address = 'https://dl.dropboxusercontent.com/u/202556979/datieolo.txt'
file, header = urllib.request.urlretrieve(address)
with open(file) as f:
   di = f.read()
diz = di.strip('\n')
diz = eval(diz)
my_info = diz['data']
print('\n')
print(my_info)
print()
for info in my_info.keys():
    print(my_info[info])
" >/tmp/mycode && python /tmp/mycode
Se servono altre elaborazioni lo puoi fare in python o chiedi pure....
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Avatar utente
ambro
Robin Hood
Messaggi: 1933
Iscritto il: 27 agosto 2009, 21:37
Località: Verona

Re: Estrarre dati da un file

Messaggio da ambro » 13 aprile 2014, 8:57

Ragazzi, grazie mille per la celerità e le varie soluzioni che mi avete dato.
Probabilmente vi sarete accorti del mio livello di capacità di programmazione rasente a 0 :D
Oggi appena ho un minuto provo e poi vi dico. Tenetevi pronti a nuove domande....
PC: Amd FX-6100-Nvidia GT630-SSD- 64bit - kernel 4.3-ck - KDE Plasma 5
Mediacenter: Asrock Q2900 Itx - VGA Intel - 64bit - kernel 4.3-ck - lxde - Kodi - isengard
Netbook: Asus eeepc1001 - i686 - kernel 4.3 - lxde

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Estrarre dati da un file

Messaggio da 4javier » 13 aprile 2014, 13:20

Nel caso non volessi scomodare python, ti basterebbe installare un parser json per la shell, come jshon.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Avatar utente
TheSaint
Robin Hood
Messaggi: 7930
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Estrarre dati da un file

Messaggio da TheSaint » 13 aprile 2014, 14:26

@4javier
Hai avuto tempo di provarlo?
Però con python lo vai anche a scaricare e qualcosa di molto elaborato, se vogliamo. Chiaro che imparare python non ci si cava in una ora. Diciamo qualcosina....
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Estrarre dati da un file

Messaggio da 4javier » 13 aprile 2014, 14:37

No, non l'ho mai provato. Per scaricare il file prima del parsing comunque gli bastano curl o wget.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Avatar utente
TheSaint
Robin Hood
Messaggi: 7930
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Estrarre dati da un file

Messaggio da TheSaint » 13 aprile 2014, 20:49

Vediamo ambro come lo vuole scrivere 'sto script.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Estrarre dati da un file

Messaggio da 4javier » 13 aprile 2014, 22:01

Per curiosità ho installato jshon (è stato creato da un utente del forum internazionale di Arch), è questa è la semplicità del risultato:

Codice: Seleziona tutto

jshon -e data -e used -u -p -e nextReset -u < datieolo.txt 
22320659
22/04/2014 23:59:59
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Avatar utente
ambro
Robin Hood
Messaggi: 1933
Iscritto il: 27 agosto 2009, 21:37
Località: Verona

Re: Estrarre dati da un file

Messaggio da ambro » 13 aprile 2014, 23:54

Intanto rinnovo i ringraziamenti a tutti.
Ho fatto semplicemente così:

Codice: Seleziona tutto

#! /bin/bash
links -dump https://care.ngi.it/ws/ws.asp?a=get.quota > ./datieolo.txt
DPAZ=$(awk '/nextReset/ {print $3}' ./datieolo.txt | sed -e 's/,//g' -e 's/"//g')
QDATI=$(awk '/used/ {print $10}' ./datieolo.txt | sed -e 's/,//g' -e 's/"//g')
echo $DPAZ > ./data.txt
echo $QDATI >> ./qdati.txt
e in .conkyrc ho inserito la riga

Codice: Seleziona tutto

${color1}${font conkysymbols:size=15}K${font Droid Sans:size=8:bold} Eolo Reset: ${exec cat "/home/ambro/scripts/data.txt"} Dati: ${exec cat "/home/ambro/scripts/qdati.txt"}
Ora sarebbe bello (ma non penso di esserne capace) rendere più interessanti questi dati:
Confrontando la data odierna con quella del prossimo reset capire quanti giorni mancano.
Fare una semplice proporzione sui dati totali che avrei dovuto utilizzare alla data odierna: 41943040 : 30 x (30-giornimancanti)
Esporre in conky i due dati in modo che risulti qualcosa del tipo:
Dati utilizzati 22320659 Utilizzo medio 31234567

Così so di essere sotto l'utilizzo medio giornaliero e quindi posso esagerare...

Grazie ancora a tutti!
PC: Amd FX-6100-Nvidia GT630-SSD- 64bit - kernel 4.3-ck - KDE Plasma 5
Mediacenter: Asrock Q2900 Itx - VGA Intel - 64bit - kernel 4.3-ck - lxde - Kodi - isengard
Netbook: Asus eeepc1001 - i686 - kernel 4.3 - lxde

Avatar utente
TheSaint
Robin Hood
Messaggi: 7930
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Estrarre dati da un file

Messaggio da TheSaint » 14 aprile 2014, 6:37

Vorrà dire che se lo vuoi, ti tieni sott' occhio la guida. Si possono fare i calcoli anche con bash
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Rispondi