|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
[Bash] Malfunzionamento sort e iniziale stringa
Questo è il codice del compito che io ho scritto.
Codice:
#!/bin/bash
# COMPITO D'ESAME 12-09-09
#
# Lorenzo Carnevale
# Lorenzo-Carnevale-373780-Esercizio1.sh - Mer 20 Gen 2010 12:03:34 CET
#
# Testo:
# Creare uno script che trovi tutti gli utenti registrati nel sistema
# che abbiano come shell i comandi "false" e "nologin" (utenti che non
# hanno associata una shell interattiva). Comunicare a video la lista
# ottenuta, contenente i campi: <usarname> <uid>. La lista deve essere
# mostrata in ordine numerico crescente rispetto al campo <uid>.
# (Suggerimento: per l'ordinamento usare il comando sort):
#
clear
temp_IFS=$IFS
IFS=$'\n'
for i in $(cat /etc/passwd | grep -v "#" | (grep "false" || grep "nologin"))
do
IFS=$temp_IFS
USERTEMP=$(echo $i | awk -F: '{printf "%s\n", $1}')
UIDTEMP=$(echo $i | awk -F: '{printf "%s\n", $3}')
SHELLTEMP=$(echo $i | awk -F: '{printf "%s\n", $7}')
# Seleziono solo gli specifici campi richiesti
echo "$UIDTEMP:$USERTEMP:$SHELLTEMP" | sort -nr
done
Inoltre si richiede il seguente secondo punto: Quote:
Codice:
./Lorenzo-Carnevale-373780-Esercizio1.sh | awk -F: '{printf "%s\n", $2}' | grep "r[*]" | wc -l
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
sorry al momento nn ho sottomano file passwd da controllare
però: 1-il compito vuole questo <usarname> <uid> e tu gli metti "$UIDTEMP:$USERTEMP:$SHELLTEMP" nn mi pare corretto 2- come mai estrai la shell? nn mi pare venga richiesta 3- non capisco che problemi hai con il sort...una volta che hai la lista <usarname> <uid> puoi sortare tranquillamente col sort -k 2 -n (k=campo n=numerico), ma nn mi è chiara la questione del -r 4- una volta che hai sempre la lista in formato come sopra, non serve nessun awk, in pipe allo script metti: grep "^r" |wc -l così sorti tutti quelli che cominciano con r (magari -i per il case sensitive) e li conti... sono solo info al volo poi magari vediamo meglio
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
PS: tanto per rendere + snello il codice, soprattutto con file molto grossi....
userei l'awk per trattare direttamente il file stesso, senza tanti IF che appesantiscono di brutto se puoi postare o mandare via mail il file magari ci do un okkio + specifico
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
nn puoi fargli TUTTO in una riga?
o al massimo 2 Codice:
cat /etc/passwd | grep -v "#" | (grep "false$" || grep "nologin$") | awk -F: '{print $1" "$3}' |sort -k 2 n
Codice:
cat /etc/passwd | grep -v "#" | (grep "false$" || grep "nologin$") | awk -F: '{print $1" "$3}' |grep -i "^r" |wc -l
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#5 | |||||
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
Quote:
Poi certo, non è stato richiesto dal compito. Quote:
La storia del "-r" deriva dalla voglia di effettuare un ordinamento decrescente (e non crescente, come il testo chiedeva) perché io mi ritrovavo, anche senza sort, i campi ordinati come richiesto. Quote:
Quote:
Comunque grazie per la disponibilità, appena sono a casa provo i cambiamenti e ti faccio sapere!
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|||||
|
|
|
|
|
#6 | |||
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
Quote:
ok per controllo puoi usare il -r ero io che nn capivo a che ti serviva Quote:
de nada fammi sapere come va
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Modificando il mio sorgente non effettua lo stesso il sort, come se non capisse qual'è il campo che deve ordinare. Proprio se ne frega.
Codice:
#!/bin/bash
clear
temp_IFS=$IFS
IFS=$'\n'
for i in $(cat /etc/passwd | grep -v "#" | (grep "false" || grep "nologin"))
do
IFS=$temp_IFS
USERTEMP=$(echo $i | awk -F: '{printf "%s\n", $1}')
UIDTEMP=$(echo $i | awk -F: '{printf "%s\n", $3}')
# Seleziono solo gli specifici campi richiesti
echo "$USERTEMP $UIDTEMP" | sort -k 2 -nr
done
Poi ho provato l'altro codice, quello mono-riga (con il "-" davanti alla "n" che avevi dimenticato Ho notato una cosa che tu hai aggiunto rispetto al mio codice, parlo delle "$" Codice:
... (grep "false$" || grep "nologin$") ...
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
il che vuol dire che fai 1 echo ogni volta.... quindi cerchi di fare il sort ad ogni ciclo... quindi sorti una riga sola ^=inizio riga $=fine riga PS: cmq per lo script preferirei senza ombra di dubbio l'awk... secondo me anche il prof lo farebbe
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] Ultima modifica di zuper : 21-01-2010 alle 19:45. |
|
|
|
|
|
|
#9 | |||
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
Ma allora che mi conviene fare? Un'idea è reindirizzare in un file temporaneo che echerò successivamente per sortare il contenuto. Ma mi sembra troppo ruvido come procedimento. Quote:
Quote:
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|||
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
ehehehe beh siamo partiti tutti dalla gioventù...ma io nn sono mica molto lontano
cmq prova una cosa del genere Codice:
for i in $(cat /etc/passwd | grep -v "#" | (grep "false" || grep "nologin"))
do
IFS=$temp_IFS
USERTEMP=$(echo $i | awk -F: '{printf "%s\n", $1}')
UIDTEMP=$(echo $i | awk -F: '{printf "%s\n", $3}')
SHELLTEMP=$(echo $i | awk -F: '{printf "%s\n", $7}')
# Seleziono solo gli specifici campi richiesti
LINE="$UIDTEMP $USERTEMP"
LINES="$LINES$LINE\n"
done
echo "LINES" | sort -k 2 -n
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
Codice:
clear
temp_IFS=$IFS
IFS=$'\n'
for i in $(cat /etc/passwd | grep -v "#" | (grep "false" || grep "nologin"))
do
IFS=$temp_IFS
USERTEMP=$(echo $i | awk -F: '{printf "%s\n", $1}')
UIDTEMP=$(echo $i | awk -F: '{printf "%s\n", $3}')
# Seleziono solo gli specifici campi richiesti
echo "$USERTEMP $UIDTEMP" >> filetemp.txt
done
cat filetemp.txt | sort -k 2 -n
rm filetemp.txt
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
scusa, colpa mia...
ho scritto un po di fretta echo "LINES" | sort -k 2 -n è chiaramente sbagliato echo "$LINES" | sort -k 2 -n questo già dovrebbe andare meglio
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
Invece mi dice non uso correttamente sort e di consultare l'aiuto con sort --help
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
se fai l'echo "$LINES" senza il sort che ti compare a video?? ti comparirà tutto su una riga....
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] Ultima modifica di zuper : 22-01-2010 alle 15:25. |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Quote:
Li vedo uno di seguito all'altro, però siamo sempre li....non li ordina!
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:35.




















