View Full Version : [Bash] Confrontare due stringhe
Zagor HW
16-01-2008, 12:20
Salve, dovrei prendere da /proc/cpuinfo il valore corrispondente ai bogomips di tutti i processori presenti nella macchina:
while read riga ; do
....
done < /proc/cpuinfo
In riga dovrebbe essere presente, ad ogni iterazione, una riga del file, ora come faccio a controllare la presenza della stringa "bogomips :", e prendere il valore numerico contenuto affianco?
Ho cercato qualche guida che mi aiutasse ma non sono riuscito a risolvere nulla, qualcuno potrebbe aiutarmi?
Grazie
Salve, dovrei prendere da /proc/cpuinfo il valore corrispondente ai bogomips di tutti i processori presenti nella macchina:
while read riga ; do
....
done < /proc/cpuinfo
In riga dovrebbe essere presente, ad ogni iterazione, una riga del file, ora come faccio a controllare la presenza della stringa "bogomips :", e prendere il valore numerico contenuto affianco?
Ho cercato qualche guida che mi aiutasse ma non sono riuscito a risolvere nulla, qualcuno potrebbe aiutarmi?
Grazie
bogomips=`cat /proc/cpuinfo | egrep -i '^bogomips' | head -1 | sed 's/^.*: //'`
Zagor HW
16-01-2008, 19:07
Ok, ti ringrazio. Una cosa sola, se metto quella riga di codice nel ciclo, salva solo il primo valore che incontro. Nel caso nel file ci siano più voci "bogomips", considera solo il primo che trova. Come si potrebbe risolvere?
Ok, ti ringrazio. Una cosa sola, se metto quella riga di codice nel ciclo, salva solo il primo valore che incontro. Nel caso nel file ci siano più voci "bogomips", considera solo il primo che trova. Come si potrebbe risolvere?
combina il suo codice col tuo :
cat /proc/cpuinfo | egrep -i '^bogomips' sed 's/^.*: //' | while read riga ; do quel_che_vuoi; done
Zagor HW
17-01-2008, 18:53
combina il suo codice col tuo :
cat /proc/cpuinfo | egrep -i '^bogomips' sed 's/^.*: //' | while read riga ; do quel_che_vuoi; done
Ok, grazie mille, così ora funziona. Avrei ancora una domanda sul funzionamento in generale dello script:
Con cat /proc/cpuinfo leggiamo il file giusto?
Con | egrep -i '^bogomips' nel file appena letto cerchiamo la parola bogomips, o sbaglio? (perché è stato introdotto il carattere ^ per rinviare ad inizio riga?)
Infine questo frammento di codice sed 's/^.*: //'
che operazione esegue nello specifico?
con grep selezioni solo la riga che riguarda i bogomips e con sed sostituisci tutto il testo prima dei ":" -> "^.*: " con niente.
con cat lo "mandiamo" verso lo standard output
il pattern di egrep ha l'accento circonflesso per fare il matching solo se la parola bogomips appare a inizio riga (funzionerebbe ugualmente nel caso specifico ma è una buona abitudine).
il sed sostituisce tutto quello che va da inizio riga a un duepunti seguito da uno spazio ( ": ") con .... niente, ovvero lo cancella lasciando solo valore numerico.
Zagor HW
17-01-2008, 22:33
Ok, vediamo se ho capito allora:
s/ <- sta per "sostituisci"
^.*: <- sta per "da inizio riga fino ai :"
// <- sta per "sostituisci con 'niente'"
è giusta questa lettura?
Questa stessa espressione (sed 's/^.*: //') come sarebbe diventata se avessi voluto sostituire con "nulla", da un determinato carattere (per esempio un punto) posto in mezzo ad una stringa, fino alla fine della riga stessa?
è giusta questa lettura?
sì
Questa stessa espressione (sed 's/^.*: //') come sarebbe diventata se avessi voluto sostituire con "nulla", da un determinato carattere (per esempio un punto) posto in mezzo ad una stringa, fino alla fine della riga stessa?
sed 's/\..*//' (dal primo punto alla fine riga)
Zagor HW
18-01-2008, 10:15
Ok, grazie mille a tutti! Ora ho risolto il mio problema. Ciao Ciao!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.