Hallo,
Ich habe mir ein kleines Shellscript geschrieben, welches mir die User in der passwd sortiert auflisten sollte.
Nur habe ich keine Idee, wie ich die Ausgabe formatieren kann.
Hier mein Script:
#!/bin/bash
#
touch /tmp/tempfile
#
sort /etc/passwd > /tmp/tempfile
#
lines=`wc -l /tmp/tempfile | awk '{print $1}'`
#
temp="1"
#
while [ "$temp" -le "$lines" ] ; do
#
line=`head -n $temp /tmp/tempfile | tail -n 1`
#
feld1=`echo $line | awk -F : '{print $1}'`
feld2=`echo $line | awk -F : '{print $3}'`
feld3=`echo $line | awk -F : '{print $4}'`
feld4=`echo $line | awk -F : '{print $5}'`
feld5=`echo $line | awk -F : '{print $6}'`
feld6=`echo $line | awk -F : '{print $7}'`
#
echo "$feld1 $feld2 $feld3 $feld4 $feld5 $feld6"
#
temp=`expr $temp + 1`
#
done
#
rm -f /tmp/tempfile
Ist zwar nicht sehr elegant, funktioniert aber grundsätzlich.
Hat jemand eine Idee, wie ich die Ausgabe formatieren Kann ?
Gruß, Peter
PS: Bin auch für Verbesserungsvorschläge aller Art offen...
Shellprogrammierung
Re: Shellprogrammierung
awk hat eine printf Funktion. Die Syntax zum Formatieren er Ausgabe ist C-aehnlich:
printf("%10s", t)
gibt also die Zeichenkette in der Variablen t auf mindestens 10 Zeichen Breite aus.
neben s fuer Strings gibt's noch
d integer
o octal
x hex
f float
g double
printf("%10s", t)
gibt also die Zeichenkette in der Variablen t auf mindestens 10 Zeichen Breite aus.
neben s fuer Strings gibt's noch
d integer
o octal
x hex
f float
g double
Re: Shellprogrammierung
@demian
Jep, mit awk funktionierts..
Vielen Dank auch,
Gruß, Peter
Jep, mit awk funktionierts..
Vielen Dank auch,
Gruß, Peter
Re: Shellprogrammierung
Verbesserungsvorschläge:
wc -l errechnet dir Länge, awk befehl deswegen nicht notwendig.
aber eigentlich müsste es doch auch so gehe:
sort /etc/passwd|awk -F:'{print $1,$3,$4,$5,$6,$7}'
Das ist die einzige Zeile. sonst steht nichts in dem Script. Wenn ich jetzt keinen Tippfehler habe (oder sonstwas vergessen habe, sollte es funktionieren. Konnte es leider nicht testen.
wc -l errechnet dir Länge, awk befehl deswegen nicht notwendig.
aber eigentlich müsste es doch auch so gehe:
sort /etc/passwd|awk -F:'{print $1,$3,$4,$5,$6,$7}'
Das ist die einzige Zeile. sonst steht nichts in dem Script. Wenn ich jetzt keinen Tippfehler habe (oder sonstwas vergessen habe, sollte es funktionieren. Konnte es leider nicht testen.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)
Re: Shellprogrammierung
geht auch mit fester Feldbreite;
sort /etc/passwd | awk -F : '{ printf("%-15s%-6s%-6s%-20s%-20s%-20s\<!--no-->n",$1,$3,$4,$5,$6,$7) }'
grundsätzlich sollte es auch mit variabler Feldbreite möglich sein, indem man die Zeichen im
jeweils längsten Feld abzählt und einer Variablen übergibt, welche man anschließend im Formatierer auswertet,
allerdings kämpfe ich noch mit der Syntax von awk.
Gruß,
sort /etc/passwd | awk -F : '{ printf("%-15s%-6s%-6s%-20s%-20s%-20s\<!--no-->n",$1,$3,$4,$5,$6,$7) }'
grundsätzlich sollte es auch mit variabler Feldbreite möglich sein, indem man die Zeichen im
jeweils längsten Feld abzählt und einer Variablen übergibt, welche man anschließend im Formatierer auswertet,
allerdings kämpfe ich noch mit der Syntax von awk.
Gruß,