Shellprogrammierung

Post Reply
Message
Author
Peter

Shellprogrammierung

#1 Post by Peter »

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...

demian

Re: Shellprogrammierung

#2 Post by demian »

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

Peter

Re: Shellprogrammierung

#3 Post by Peter »

@demian

Jep, mit awk funktionierts..

Vielen Dank auch,
Gruß, Peter

trinity
Posts: 821
Joined: 12. Oct 2001 10:04

Re: Shellprogrammierung

#4 Post by trinity »

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.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)

alias_maya

Re: Shellprogrammierung

#5 Post by alias_maya »

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ß,

Post Reply