awk if 文の書き方 一致・大小比較・正規表現を使って条件を簡潔に書く方法

スポンサーリンク

awk if 文の書き方

構文の書き方

awkのif文は、条件に応じて処理を分岐させるための重要な構文です。ifelse ifelseを組み合わせることで、複雑な条件分岐を実現できます。条件式には、一致判定、大小比較、パターンマッチなどを指定します。

基本的な構文は以下の通りです。

if (条件式) {
    // 条件を満たしたときの処理
} else if (条件式) {
    // 別の条件を満たしたときの処理
} else {
    // 上記の条件を満たさないときの処理
}

1行で書く場合、ifelseの後にセミコロン;で区切ります。複数の処理を実行する場合は、中括弧{}で囲みます。

awk スクリプトファイル

awkスクリプトをファイルに保存して実行する方法です。

サンプルスクリプト:sample.awk

{
    if ($1 ~ /^$/)
        print "空白行です:", NR
    else if ($1 ~ /^#/) {
        print "コメント行です:", NR
        print "内容:", $0
    } else
        print "通常の行です:", $0
}

このスクリプトは、各行の先頭が空白行か#で始まるコメント行か、それ以外かを判定し、それぞれに応じたメッセージを表示します。NRは現在の行番号、$0はその行の全内容を表します。

実行方法

awk -f sample.awk test.txt

test.txtは解析対象のテキストファイルです。

awk ワンライナー

コマンドライン上で直接awkコマンドを実行する方法です。スクリプトファイルを作成せずに、短い処理を手早く実行できます。

サンプルワンライナー

awk '{ if ($1 ~ /^$/) print "空白行です:", NR; else print "内容:", $0 }' test.txt

このコマンドは、空白行の場合に「空白行です」と表示し、それ以外の場合にその行の内容を表示します。

awk if 使い方

if – 単純な分岐

指定した条件を満たす場合のみ処理を実行します。

サンプルスクリプト:awk_if.awk
{
    if ($1 ~ /^$/) {
        print "空白行を発見:", NR
    }
}

このスクリプトは、空白行を検出した場合にその行番号を表示します。

実行方法と結果
$ awk -f awk_if.awk test.txt
空白行を発見: 3

else – 条件に合うとき・合わないとき

条件を満たす場合と満たさない場合で異なる処理を行います。

サンプルスクリプト:awk_if_else.awk
{
    if ($1 ~ /^$/)
        print "空白行です:", NR
    else
        print "内容:", $0
}

このスクリプトは、空白行の場合に行番号を表示し、それ以外の場合にその行の内容を表示します。

実行方法と結果
$ awk -f awk_if_else.awk test.txt
内容: 第一行のテキスト
空白行です: 2
内容: 第二行のテキスト

else if – 条件を加える

複数の条件を設定し、それぞれに対応した処理を行います。

サンプルスクリプト:awk_else_if.awk
{
    if ($1 ~ /^$/)
        print "空白行です:", NR
    else if ($1 ~ /^#/)
        print "コメント行です:", NR
    else
        print "内容:", $0
}

このスクリプトは、空白行、コメント行、それ以外の行で異なるメッセージを表示します。

実行方法と結果
$ awk -f awk_else_if.awk test.txt
内容: データ1
コメント行です: 2
空白行です: 3
内容: データ2

awk if の 条件判定

一致を調べる

特定の行番号や値に一致するかを調べます。

サンプルコマンド
awk -v line=2 '{ if (NR == line) print "一致した行:", $0 }' test.txt

このコマンドは、2行目に一致した場合にその内容を表示します。

実行結果
一致した行: データ1

大小比較を調べる

数値の大小関係を比較します。

サンプルコマンド
awk -v threshold=100 '{ if ($1 > threshold) print "値が大きい:", $1 }' data.txt

data.txt内の最初のフィールドが100より大きい場合に表示します。

文字列のパターンを調べる

正規表現を使って文字列をマッチングします。

サンプルコマンドと説明
  • 先頭がaの場合
  awk '{ if ($1 ~ /^a/) print "先頭がaです:", $0 }' test.txt

行の先頭がaで始まる場合に表示します。

  • 末尾がdの場合
  awk '{ if ($1 ~ /d$/) print "末尾がdです:", $0 }' test.txt

行の末尾がdで終わる場合に表示します。

  • 先頭がaまたはbの場合
  awk '{ if ($1 ~ /^[ab]/) print "先頭がaまたはbです:", $0 }' test.txt

行の先頭がaまたはbで始まる場合に表示します。

実行結果
先頭がaです: apple
先頭がaまたはbです: banana

awk if を短く簡潔に書く

if 改行を省略して簡潔に短く書く

短い条件文は1行で書くことができます。

サンプルコマンド
awk '{ if ($1 ~ /^$/) print "空白行"; else print "内容:", $0 }' test.txt

2項演算子を使って簡潔に短く書く

条件式を使って、一行で条件分岐を記述します。

サンプルコマンド
awk '{ print ($1 ~ /^$/) ? "空白行" : "内容: " $0 }' test.txt

?の前が真の場合に左側の値、偽の場合に右側の値を返します。

awk if 文の書き方 – まとめ

awkのif文は、データ処理において強力なツールです。条件分岐を使いこなすことで、複雑なデータ解析やテキスト処理を効率的に行えます。サンプルスクリプトを活用し、実際に手を動かして理解を深めましょう。

参考情報

実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。

スポンサーリンク

論文・データ解析の支援

個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。

とにかく、早く問題を解決したい人にはこちら>>直接、データ解析相談
とにかく早く問題解決したい人はこちら>>直接、論文相談

関連記事

awk 行の表示 先頭行 最終行 指定行
awkは、テキスト処理に欠かせません。よく使う「行を指定した処理」に使える定型スクリプトをまとめました。簡単に書けるように、省略できる部分は極力省きました。awk と 行awkで行を指定して「何かの処理」を実行するときは、「いま何行目?」を...
awk 置換や部分文字列などの文字列処理 gsub sub match index split 等
awkの文字列関数について、置換や部分文字列処理など、よく使う代表的なものを簡単なサンプルを使って紹介します。awk 置換文字列置換 gsub subgsub・subは、対象となる文字列tについて正規表現rにマッチした部分を置換文字列sで置...
awk 複数行の処理
ファイルには様々な形式があります。1行単位で記述されたCSV(カンマ区切り)ファイルやTSV(タブ区切り)ファイルは、awkやsed、その他のbashコマンドなどを使っても比較的処理がしやすい。しかし、複数行でレコードが構成される場合(1行...
awk split | サンプルでわかる列の分割とセパレータ指定方法
awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や正規表現で指定できて、指定しない場合はフィールドセパレータがデリミタとして使われます。分割後の単語は、配列に格納されて1〜分割数nまでのインデ
awk 配列 使い方
awkでは、他のプログラミング言語のように配列を使うことができます。配列の簡単な使い方のまとめです。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 連想配列awkの配列では、インデックスには文字列でも数字でも使うことがで...
awk よく使うシステム変数と使い方
awkのスクリプトでは、参照や設定が可能な「特殊な変数(システム変数)」を使うことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談よく使うシステム変数awkのスクリプトでシステム変数を使うと、より簡潔にスクリプトを表...
awk パターンとアクション
awkは、入力行に対してフィルタリングなどの処理を行う際によく用いられます。入力行に対して「どの行に処理を行うか」を指定するのがパターン、「どんな処理を行うか」を指定するのが「アクション」です。とにかく早く問題解決したい人はこちら>>直接、...
awk 区切り文字とフィールド
awkは、入力の各行を区切り文字でフィールドに分割して、それぞれを個別に取り出すことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 区切り文字の変更入力行をフィールドに分割するのは区切り文字です。デフォルトは...
awk コマンドラインでの実行とスクリプトファイルでの実行
awkを実行する場合、コマンドラインで指定する方法と、スクリプトファイルを指定する方法があります。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk コマンドラインで指定するpatternとactionは、シングルクォートで...
awk 使い方 フィールド取り出し スクリプトの書き方
awkで簡単なフィールドデータの取り出しを行います。awk は入力された行について、空白やタブで区切られたデータをフィールドと解釈します。・…を指定することで、各行のフィールドを取り出すことができます。尚、https://bioinfo-dojo.net/2016/02/18/awk_easy_field_filter/は入力行全体です。se...
正規表現 メタキャラクタ 検索・置換 前編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集合を特殊文字(メタキャラク...
正規表現 メタキャラクタ 検索・置換 後編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集合を特殊文字(メタキャラク...
タイトルとURLをコピーしました