ネットで調べたところ、答えは、「;」(セミコロン)でした。
詳しくは、
⇒ こちらの記事をご覧ください。
手元に、awkの教科書
「プログラミング言語 AWK(第2版)」
があるので、改めて同書で、その点を調べてみました。
答えは、12ページ目に書かれていました。
「アクションとは改行やセミコロンで区切られた文が並んだものだ。」
と、このように解説されています。
「あれ?
セミコロンのほかに、改行でもいいのか。」と分かりました。
んで、さっそく試してみました。
![](https://blogimg.goo.ne.jp/user_image/39/03/802fc55222b5538ffbeaa5c8561419c4.jpg)
用いるのは、前回記事と同じ具体例です。
名簿テキストファイル(hoge.txt)に、次のように、各人の点数を保存します。
1 tanaka 34
2 kawano 75
3 nakano 44
4 yamada 56
5 yosida 62
2 kawano 75
3 nakano 44
4 yamada 56
5 yosida 62
そして、各人の点数と合計点を表示させるために、コマンドラインに次のように記述します。
awk '{print $2"さんは"$3"点";i=i+$3}END{print "合計点は"i"点"}' hoge.txt
その上で、セミコロン(;)を改行に置き換えるために、上記コマンド記述中、セミコロンを削除し、Enterキーを押してみました。
そうすると、ここで、エラーが出ます。
あれ?ってなりましたが、このエラーは当然です。Enterキーはコマンドを実行するためのキーだからです。つまり、(そこに改行を入れるためにEnterキーを押したのですが、)改行は挿入されずに、コマンドが実行されてしまいます。セミコロンを削除した不完全なコマンドだから、当然、エラーが出ます。
つまり、コマンドラインに複数のアクションを記述するときには、各アクション文を区切るのに改行は使えないということです。
実は、アクション文の区切り文字に改行が使えるのは、スクリプトを別個のファイルとする場合なのです。
awkコマンドのスクリプト部分を別個のファイルとするために、次の内容のテキストファイルを作りました。
{
print $2"さんは"$3"点"
i=i+$3
}
END{
print "合計点は"i"点"
}
print $2"さんは"$3"点"
i=i+$3
}
END{
print "合計点は"i"点"
}
このテキストファイルを、「goukei.awk」というファイル名で保存します(ファイル名は「任意」のもので可)。これがスクリプトファイルです。
次に、ターミナルを起ち上げて、コマンドラインに次のとおり打ち込みます。
$ awk -f goukei.awk hoge.txt
これを実行すると、望みどおりの結果が得られます。
実行結果は、次のとおりです。
tanakaさんは34点
kawanoさんは75点
nakanoさんは44点
yamadaさんは56点
yosidaさんは62点
合計点は271点
kawanoさんは75点
nakanoさんは44点
yamadaさんは56点
yosidaさんは62点
合計点は271点
awkの -f オプションにより、指定されたファイルからスクリプトを読み込むわけです。
ちなみに(余談ですが)、このように、スクリプトを別個のファイルとするときは、前後にシングルクォーテーションを付ける必要はありません(これに対して、コマンドラインに記述するときは、シングルクォーテーションで囲むことが必要)。
このスクリプトファイルに複数のアクションを並べるとき、改行を用いることができます。一行ごとに一つのアクションとなるので、読みやすいファイルとなります。
ですから、長いスクリプトの場合は、コマンドラインに直接記述せず、別個のスクリプトファイルとするのがよいようです。
■ awkの基本教科書
それでは、また次の記事で
■■■■ goosyun ■■■■