awk if 文の書き方
構文の書き方
awkのif
文は、条件に応じて処理を分岐させるための重要な構文です。if
、else if
、else
を組み合わせることで、複雑な条件分岐を実現できます。条件式には、一致判定、大小比較、パターンマッチなどを指定します。
基本的な構文は以下の通りです。
if (条件式) {
// 条件を満たしたときの処理
} else if (条件式) {
// 別の条件を満たしたときの処理
} else {
// 上記の条件を満たさないときの処理
}
1行で書く場合、if
やelse
の後にセミコロン;
で区切ります。複数の処理を実行する場合は、中括弧{}
で囲みます。
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
文は、データ処理において強力なツールです。条件分岐を使いこなすことで、複雑なデータ解析やテキスト処理を効率的に行えます。サンプルスクリプトを活用し、実際に手を動かして理解を深めましょう。
参考情報
実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。


関連記事











