スポンサーリンク

awkで列の操作

組み込み変数 $0,$1,$2で列を操作

awkの$0は、1行全体の文字列が格納されていきます。

そして、$1は1列目、$2は2列目、$3は3列目が格納されていきます。

詳細:awkの$0,$1,$2,$3,変数で列の操作

スポンサーリンク

列の抽出

awkの変数を使って、特定の列を抽出します。
例えば、カンマ区切りのファイルの2列目を抽出する場合です。

詳細:awkで特定の列を抽出する

列の削除

削除したい列を除外して、print出力すればできます。
例えば、2列目を削除する場合には、
print出力時に、$1と$3のみprint出力するだけです($2はprint出力しない)。

詳細:awkで列を削除する方法

列の入れ替え

print出力する順番を指定すれば、入れ替えも簡単です。
例えば、1列目と3列目を入れ替える場合は、
print出力の際に、1列目と3列目を入れ替えればできます。

詳細:awkで列を入れ替える方法

列を追加・插入

print出力時に、列の変数と追加・挿入したい文字列を組み合わせることで、列の追加・挿入もできます。

1列目と2列目の間に、"add"という文字列の列を挿入します。
print出力時に、$1と$2の間に"add"を挿入します。

詳細:awkで列を追加・挿入する方法

スポンサーリンク

awkの型(構文)

awkは、下記の型(基本構文)に合わせて書いて、用途に合わせてカスタマイズすると良いと思います。

awkのブロック処理の順番は下記になります

1. BEGINブロック
2. メインブロック
3. ENDブロック

参考:awkの基本構文

BEGINブロックの使い方

基本的にはBEGINブロックで変数を初期化するのが、わかりやすいと思います。
参考:awkで変数の初期化はBEGINブロック内が基本

ENDブロックの使い方

ENDブロックは最終処理に使います
参考:awkのENDブロックをうまく使おう

awkで文字列を連結する方法

awkで文字列を連結させるには、文字列を連結したい順に列挙することで、簡単に連結した文字列作り出すことができます。

下記のように、"awk" "find" "ls"を連結するには、str = "awk" "find" "ls"のように列挙して、変数strに代入してあげます。

詳細:awkで文字列を連結させる方法

awkで文字列の置換

gsub()の使い方

gsub()で文字列の置換ができます。
gsub()は、入力文字列に対して、全ての置換対象文字列を置換します。

例えば、1フィールド(列)目の文字列"-"を"/"に置換したい場合は、下記のように書きます。

詳細:awkの文字列置換関数gsub()の使い方

sub()の使い方

sub()は、入力文字列に対して、最初の置換対象文字列のみを置換します。

例えば、$0(1行全体)を、下記のようにsub()を使って、"line"を"after"に置換します。

詳細:awkのsub()で文字列置換する

gsub()とsub()の違い

gsub():置換対象文字列があった場合は全て置換する
sub():最初の置換対象文字列のみ1回置換

詳細:awkのgsub()とsub()の違いは置換回数の回数制約

awkで文字列を切り出し

awkのsubstr()の使い方

substr()は、文字列StrのN文字目からL文字切り出して、戻り値として返します。

awkは0オリジンではなく、先頭の開始文字は1文字目となることに注意が必要です。

例えば、1フィールド(列)目の3文字目から3文字切り出したいときには、下記のように書きます。
変数numに、切り出した結果が格納されます。

詳細:awkでsubstr()を使って文字列を切り出す方法

awkのsubstr()とindex()の使い方

awkのindex()は、対象文字列を先頭から検索し、検索文字列が検出された最初の位置を戻り値として返します。

substr()とindex()を組み合わせると便利です。
例えば、"0"の文字列を検出した最初の位置から3文字分だけ切り出したい場合は、下記のように書くことができます。

詳細:awkでsubstr()の切り出し開始位置をindex()で指定する方法

awkの大文字/小文字の変換はtolower()/toupper()

小文字への変換は、tolower()を使います。

大文字への変換は、toupper()を使います。

引数に変換対象文字列、strに変換後の文字列が格納されます。

詳細:awkの大文字/小文字の変換はtolower()/toupper()を使えばOK

awkの組み込み変数

詳細:awkの便利な組み込み変数(サンプルコードあり)

FS変数で区切り文字を設定

FS変数で区切り文字を設定できます。
例えば、区切り文字をカンマにする場合には、下記のようにFS = "," と設定します。

詳細:awkのFS変数で区切り文字を設定

OFS変数で出力の区切り文字を設定

OFS変数で出力の区切り文字を設定できます。
例えば、awkの出力区切り文字をスペースにする場合は、下記のようにOFS = " " を設定します。

NR変数で処理中の行数を取得

NR変数で処理中の行数を取得できます。
例えば、下記は2行目と4行目の行をprint出力していて、NR == 2 || NR == 4 のときにprint出力しています。

詳細:awkのNR変数で行数に応じた処理をする

NF変数で処理中の列数が取得

NF変数で、処理中の列数が取得できます。

例えば、列の欠損チェックに使えて、下記は3列で構成されていない行数をprint出力します。

詳細:awkのNF変数で列数に応じた処理をする

awkのmatch()関数の使い方

awkのmatch()は、対象文字列を先頭から検索し、検索対象が検出された最初の位置を戻り値として返します。

例えば、下記は、検索対象には正規表現で/[1-9]/ と指定し、1~9の数字が検出された最初の位置をprint出力します。

詳細:awkのmatch()関数の使い方

awkでcsvファイルを処理する

下記のように、-Fオプションで","を指定して処理します。

BEGINブロックでFS変数に","を指定する方法もあります。

詳細:awkでcsvファイルを処理する

awkのif分

awkもif文が使えます。
if~else if ~ else、&条件、or条件等、使いこなせるようになっておきたいです。

詳細:awkのif文のサンプルコード

awkのwhile文

awkでは、while文も使えます。

下記は、whileでループ処理させて、breakでwhile文の処理から抜け出します。

詳細:awkのwhile文のサンプルコード

awkのオプション

-Fオプションで区切り文字を設定

-Fオプションで区切り文字を設定できます。
例えば、タブ区切りにしたい場合には、下記のように設定します。

詳細:awkの-Fオプションで区切り文字を指定する方法

-vオプションでawk内部で使う変数に値を設定

-vオプションでawk内部で使う変数に値を設定できます。
例えば、下記は、strYear="年"、strMonth="月"、strDay="日"を設定しています。

詳細:引数でawkに値を渡す方法:-vオプションを使う

awkのlength()で文字列の長さを取得

length(文字列)の形式で文字列の長さを戻り値として返します。

下記は、1行ずつ行全体($0)の文字列の長さを返しています。

詳細:awkのlength()で文字列の長さを取得

awkのprintfの使い方

awkのprintfの書式を下記の形式で書くことができます。

%[フラグ][出力幅][.精度]型

例えば、下記のように書けます。
・整数の出力

・小数点の出力

その他の例は下記に書いています。
詳細:awkでよく使うprintfの書式のサンプルコード

スポンサーリンク