PDA

View Full Version : [Script Shell] probema con awk


miglio.vale
20-11-2010, 11:51
Salve, ho un problema con awk. Mi spiego meglio, devo scrivere uno script che trovi e stampi a video tutti gli utenti registrati nel sistema che abbiano "false" come shell. A video la lista deve essere mostrata come <username> <uid> in ordine numerico crescente rispetto a <uid>.

Quel che ho fatto io è:
#!/bin/sh

FILE=/etc/passwd
echo $(sed -n '/false/p' $FILE | awk 'BEGIN{FS=":"}{print $3, $1}' | sort | awk '{print $2, $1}')
exit 0

ma il risultato me lo stampa a video senza che awk vada a capo tra i vari record, inoltre ho dovuto mettere il secondo awk perché, se a sort davo l'opzione -n(ordinamento numerico), sort non mi ordinava rispetto al uid.

Se qualcuno mi potesse spiegare esattamente dove ho sbagliato, gliene sarei grata

Torav
20-11-2010, 16:02
Il tuo script mette in una variabile la lista che ottieni. I caratteri di newline non vengono considerati. Quello che devi fare probabilmente è usare printf("%d %d\n", $2, $1) e poi passare l'opzione -e a echo.
Cmq puoi usare sort per dirgli direttamente di fare il sort (numerico se vuoi) direttamente rispetto ad un dato campo. Ad esempio con

sort -n -k 2

lui fa un sort numerico rispetto al secondo campo. Inoltre puoi evitare di utilizzare awk tramite il comando cut. Ad esempio se vuoi prendere primo e terzo campo del file /etc/passwd ti basta dare

cut -d':' -f1,3 --output-delimiter=' ' /etc/passwd

miglio.vale
20-11-2010, 17:33
Grazie, adesso ho le idee un pò più chiare