
Ich entwickle seit Jahren Windows-Software. Ich versuche, mich weiterzuentwickeln und Linux zu lernen. Das wird mir bei meinem neuen Job wirklich helfen.
Ich habe mir das Buch „Awk and Sed“, 2. Auflage, besorgt. Ich verwende Ubuntu 13.04 und arbeite mit dem Terminalfenster. Ich arbeite das Buch durch und bin auf ein Beispiel gestoßen, das ich nicht zum Laufen bekomme.
Ich habe alles versucht, was ich finden konnte, um dies zum Laufen zu bringen. Wenn ich das Beispiel eingebe, ohne die zweite Skriptdatei zu verwenden, funktioniert es wie erwartet. Wenn ich jedoch versuche, wie im Buch beschrieben vorzugehen (d. h. eine Skriptdatei zu verwenden), erhalte ich Folgendes: „byState: Befehl nicht gefunden“. Der Befehl, der fehlschlägt, ist:
sed -f nameState list | byState
Was ist mein Problem?
Hier ist ein Datensatz: Liste =
John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA
Das erste Skript lautet: nameState =
s/ CA/, California/
s/ MA/, Massachusetts/
s/ OK/, Oklahoma/
s/ PA/, Pennsylvania/
s/ VA/, Virginia/
Das zweite Skript lautet: byState =
#! /bin/sh
awk -F, '{
print $4 ", " $0
}' $* |
sort |
awk -F, '
$1 == LastState {
print "\t" $2
}
$1 != LastState {
LastState = $1
print $1
print "\t" $2
}'
Antwort1
Ihr Skript byState
ist möglicherweise nicht ausführbar.
Versuchen:
chmod +x byState
... um das Skript ausführbar zu machen, versuchen Sie es dann erneut mit Ihrer Befehlszeile.
Da Unix das aktuelle Verzeichnis standardmäßig nicht in den Pfad einschließt, müssen Sie möglicherweise zusätzlich oder alternativ Folgendes schreiben:
sed -f nameState list | ./byState
... anstatt
sed -f nameState list | byState
Antwort2
Sie könnten Folgendes versuchen:
sed -f namestate list | sort -k 4 -t ,