awk 置換や部分文字列などの文字列処理 gsub sub match index split 等

awkの文字列関数について、置換や部分文字列処理など、よく使う代表的なものを簡単なサンプルを使って紹介します。

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

awk 置換

文字列置換 gsub sub

gsub・subは、対象となる文字列tについて正規表現rにマッチした部分を置換文字列sで置換します。なお、gsubはマッチした部分全てを置換・subは最初にマッチした部分のみを置換。尚、対象となる文字列が指定されない場合は、$0(行全体・レコード全体)が対象となります。

書式

  gsub(正規表現r, 置換文字列s, 対象となる文字列t (省略時、$0))
   sub(正規表現r, 置換文字列s, 対象となる文字列t (省略時、$0))

実行と結果

gsubの場合は全ての”test”を”TEST”に置き替え。subの場合は、最初の”test”だけ”TEST”に置き替えます。

$ echo "test1 test2" | awk '{ if (gsub(/test/, "TEST")) print }'
TEST1 TEST2
$ echo "test1 test2" | awk '{ if (sub(/test/, "TEST")) print }'
TEST1 test2

awk 部分文字列

部分文字列 substr

substrは、対象となる文字列tについて指定ポジションp以降で長さnの部分文字列を作成します。長さが指定されない場合は、文字列の最後まで。

書式

  substr(対象となる文字列t, 位置p, 長さn (省略時、文字列tの最後まで))

実行と結果

“abcd…”の10番目(j)以降で部分文字列を作成します。長さを指定すると、指定長さで部分文字列を作成します。

$ echo "abcdefghijklmn" | awk '{ print substr($0, 10)}' 
jklmn
$ echo "abcdefghijklmn" | awk '{ print substr($0, 10, 3)}' 
jkl

部分文字列 split

splitは、対象となる文字列tについてセパレータsで分解し、配列aに部分文字列を格納します。

書式

  split(対象となる文字列t, 配列a, セパレータs (省略時、セパレータFS))

実行と結果 セパレータ指定なし

$ echo "test1 test2" | awk '{ split($0, a); print a[1]}'
test1
$ echo "test1 test2" | awk '{ split($0, a); print a[2]}'
test2

実行と結果 セパレータ指定(,)

$ echo "test1,test2" | awk '{ split($0, a); print a[1]}'
test1,test2
$ echo "test1,test2" | awk '{ split($0, a, ","); print a[1]}'
test1

awk 文字列検索

文字列検索(文字列で探す) index

indexは、対象となる文字列tから部分文字列sを探してヒットした位置を返します。ヒットしなければ0を返します。

書式

  index(対象となる文字列t, 部分文字列s)

実行と結果

“abcd…”の中から部分文字列”jkl”が見つけてヒットした位置10を返します。部分文字列を大文字に変更すると、見つからないので0を返します。

$ echo "abcdefghijklmn" | awk '{ print index($0, "jkl")}' 
10
$ echo "abcdefghijklmn" | awk '{ print index($0, "JKL")}' 
0

文字列検索(正規表現で探す) match

matchは、対象となる文字列tから正規表現rにヒットする先頭位置を返します。ヒットしなければ0を返します。尚、RSTARTとRLENGTHに先頭位置・長さの値を格納します。

書式

  match(対象となる文字列t, 正規表現r)

実行と結果

“abc123…”の中から正規表現/[0-9]+/(数字の連続)にヒットした位置を見つけて先頭の4を返します。RSTARTも4、RLENGTHは3です。正規表現を/[A-Z]+/(大文字アルファベットの連続)に変更すると、見つからないので0を返します。RSTARTも0、RLENGTHは−1です。

$ echo "abc123ghijklmn" | awk '{ print match($0, /[0-9]+/); print RSTART, RLENGTH}' 
4
4 3
$ echo "abc123ghijklmn" | awk '{ print index($0, /[A-Z]+/); print RSTART, RLENGTH}' 
0
0 -1

awk その他の文字列関数

その他の文字列関数 tolower, toupper

tolowerとtoupperは文字列の大文字・小文字変換です。

実行と結果

$ echo "abcdefghijklmn" | awk '{ print toupper($0)}' 
ABCDEFGHIJKLMN

その他の文字列関数 length

lengthは文字列の長さを返します。

実行と結果

$ echo "abcdefghijklmn" | awk '{ print length($0)}' 
14
とにかく早く問題解決したい人はこちら>>直接、論文相談

関連記事

awk 行の表示 先頭行 最終行 指定行
awk 複数行の処理
awk split | サンプルでわかる列の分割とセパレータ指定方法
awk while・do 繰り返し処理
awk for | サンプルでわかる、基本的な繰返し・変則的な繰返し
awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法
awk 配列 使い方
awk よく使うシステム変数と使い方
awk パターンとアクション
awk 区切り文字とフィールド
awk コマンドラインでの実行とスクリプトファイルでの実行
awk 使い方 フィールド取り出し スクリプトの書き方
正規表現 メタキャラクタ 検索・置換 前編
正規表現 メタキャラクタ 検索・置換 後編



カテゴリー

今週よく読まれている記事

  1. 学会・会議で英語が絶望的にできなくて困るケース | オンライン開催で「英語力のなさ」を痛感した場合の対処法

    学会・会議で英語ができなくてに困るケース学会やイベント・会議などが、オンラインで開催される…
  2. r tidyverse 使い方 | 列 filter 絞り込み select関数 – dplyrパッケージ

    tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を…
  3. プログラミングで疲れた脳をリフレッシュ 〜 鬼滅の刃「感動」と「やる気アップ」でストレス発散!

    ストレス発散は鬼滅で。「50%OFF」で読む!脳のパフォーマンスを上げるには、適度な休憩と…
  4. AWS ディスク容量不足 新しいボリュームを追加する

    バイオインフォマティクスでは大きなファイルを扱うことがあるので、ディスク不足に陥ることがあります。…
  5. 「知っている」と「知らない」とでは、もしものとき、大違いになる – コロナうつ対策

    コロナうつなどという言葉を聞くようになりましたが、派遣切り、解雇、リストラは、これから本格化します…

人気記事

  1. R言語

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. Excel, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…

おすすめ記事

  1. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  2. awk, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  3. シェルスクリプト

    シェルスクリプト | ファイル存在チェック・空ファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…