どうも、シローです。
みなさんはAWKについてご存知ですか?
AWKとはプログラミング言語の一種で文字列を編集するのに特化しています。
主な利用用途としてはターミナルでのコマンドとして文字列処理の過程で使われます。
AWKをある程度知っておくと、テキストファイルをちょっと変更して出力する時などにコマンド一発で行けたりするので
意外と業務でも役に立つことがありそうですよ。
というわけで、僕も勉強中なのですけど、練習問題を出して後で回答を出す感じの形式でまとめようと思いますー。
事前準備
今回はAWKで編集するファイルはこれなので、適宜用意してください。
1 2 3 4 |
shiro シロー PHP プログラミング 30 yuki ユーキ C# ゲーム作り 26 masa マサ Python ボードゲーム 23 satoshi サトシ JavaScript IoT 31 |
aa
catコマンドで出力した結果にAWKを通して出力しようと思います。こんな感じで
1 2 3 4 5 |
shiro@mac level1 $ cat sample.txt | awk '{print}' shiro シロー PHP プログラミング 30 yuki ユーキ C# ゲーム作り 26 masa マサ Python ボードゲーム 23 satoshi サトシ JavaScript IoT 31 |
それでは問題です。
問題1:1列目と2列目を出力してください。
問題2:5列目が30を超えている行を出力してください
問題3:3列目がPHPとなっている行を出力してください
回答は↓
回答1
1 2 3 4 5 |
shiro@mac level1 $ cat sample.txt | awk '{print $1, $2}' shiro シロー yuki ユーキ masa マサ satoshi サトシ |
AWKコマンドは各行の空白で分割された単語を$1, $2, $3....という風に格納しています。
今回は1,2列目に絞って出力するので'{print $1, $2}'
で大丈夫です。
回答2
1 2 |
shiro@mac level1 $ cat sample.txt | awk '$5 > 30 {print}' satoshi サトシ JavaScript IoT 31 |
AWKで出力する条件を絞り込む時は'{print}'の前に条件式を記述します。
今回は5列目が30を超えている場合なので、'$5 > 30' とした後で '{print}'で行を出力します。
回答3
1 2 |
shiro@mac level1 $ cat sample.txt | awk '$3 == "PHP" {print}' shiro シロー PHP プログラミング 30 |
文字列が一致するかの条件は多くのプログラミング言語と同じように'=='が使えます。
ただ、気をつけないと行けないのが、文字列の一致を判定するために' " '(ダブルクォーテーション)で挟んでやる必要があります。
なので、'$3 == "PHP"'をprintの前に記述します。全体をシングルクォーテーションで囲っているので、勘違いしやすいので、ちゃんとダブルクォーテーションで挟むのがポイントです。
コマンドであり軽量言語(LL)の元祖でもあって、
シェルでのテキストデータ処理には便利で手放せない
「AWK」の魅力と書き方、シェルコマンドと組み合わせた
テクニック(シェル芸)を解説!