パソコン悪戦苦闘記録

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

 Linuxでawk(オーク)コマンドを使っていて、つまづいた点があったので、ここに記録しておきます。
 分からなかったのは、複数のアクションの実行です。
 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
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「Ubuntu」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事