つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

awkで複数のアクションの実行~区切り文字は?

 Linuxawk(オーク)コマンドを使っていて、つまづいた点があったので、ここに記録しておきます。
 分からなかったのは、複数のアクションの実行です。
 awkで2つのアクション実行のとき、各アクションの記述の間に何を入れるのか分からず、戸惑いました。


 awkコマンド実行の基本形は、
  awk <スクリプト> <対象ファイル>
です。

 上記の <スクリプト> の部分に、対象テキストファイルに対して実行する処理内容を記述します。
 awkスクリプトは、
    「パターン」
    「アクション」
の2つで構成されます。
 'パターン{アクション}' という形です。

 パターンの箇所には、
  アクションを実行するかどうかの条件を記述します。
 アクションの箇所には、
  テキストの抽出や置換、削除などの編集処理を記述します。


 このような、awkの基本(イロハ)については、
   こちらの記事をご覧ください。


 そのアクションとして、複数の処理を記述したい場合があります。
 
 具体例を挙げます。
 次の名簿テキストファイル(hoge.txt)があり、各人の点数が保存されています。

1 tanaka 34
2 kawano 75
3 nakano 44
4 yamada 56
5 yosida 62


 この名簿の各人の点数を表示させた上で、さらに全員の合計を出そうとしました。
 そこで、コマンドラインに次のような記述をしました。
awk '{print $2"さんは"$3"点"■i=i+$3}END{print "合計点は"i"点"}' hoge.txt

 悩んだのは、上記の記述中、■の部分に何を入れるか、です。
 (前にどこかで見かけたが、思い出せない。)




 
・・・んで、その答えは、
 「;」セミコロン  でした。

 awkで複数のアクションを1行に記述するには
 第1アクションと、第2アクションの間に、「;」セミコロンを入れます。
 「;」セミコロンが、各アクションの区切り文字となります。

ですから、コマンドラインには、次のとおり記述することになります。

awk '{print $2"さんは"$3"点";i=i+$3}END{print "合計点は"i"点"}' hoge.txt


 ちなみに、上記のawkコマンドの実行結果は、次のとおりです。

tanakaさんは34点
kawanoさんは75点
nakanoさんは44点
yamadaさんは56点
yosidaさんは62点
合計点は271点






それでは、また次の記事で
goosyun