Awk と Sed の本の例を Ubuntu 13.04 で動作させようとしています

Awk と Sed の本の例を Ubuntu 13.04 で動作させようとしています

私は何年も Windows ソフトウェアを開発してきました。分野を広げて Linux を学ぼうとしています。新しい仕事に本当に役立つと思います。

私は「Awk and Sed」第 2 版という本を手に入れました。Ubuntu 13.04 を実行していて、ターミナル ウィンドウで作業しています。この本の手順に沿って作業しているのですが、うまく動作しない例に遭遇しました。

これを機能させるために、見つけられる限りのことをすべて試してきました。2 番目のスクリプト ファイルを使用せずに例を入力すると、期待どおりに機能します。ただし、本の説明どおりに (つまり、スクリプト ファイルを使用して) 操作しようとすると、次のメッセージが表示されます: "byState: コマンドが見つかりません"。失敗するコマンドは次のとおりです。

sed -f nameState list | byState

私の問題は何ですか?

ここにデータセットがあります: リスト =

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

最初のスクリプトは次のとおりです: nameState =

s/ CA/, California/
s/ MA/, Massachusetts/
s/ OK/, Oklahoma/
s/ PA/, Pennsylvania/
s/ VA/, Virginia/

2番目のスクリプトは: 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
}'

答え1

スクリプトはbyState実行可能ではない可能性があります。

試す:

chmod +x byState

... スクリプトを実行可能にしてから、コマンド ラインをもう一度試してください。

さらに、または代わりに、Unix ではデフォルトで現在のディレクトリがパスに含まれないため、次のように記述する必要がある場合があります。

sed -f nameState list | ./byState

... の代わりに

sed -f nameState list | byState

答え2

これを試すといいかもしれません:

sed -f namestate list | sort -k 4 -t ,

関連情報