AWKコマンド練習問題:3 [文字列関数のテクニック]

それではAWK練習問題、第3回目

今回は文字列操作を行う関数を使って、正規表現にマッチした行を出力するとか、文字列の一部を切り取ったり、置換したりした結果を出力する

文字列操作関数

AWKで用意されている文字列操作関数を紹介する

substr

説明 文字列を抜き出す
第1引数 対象フィールド
第2引数 抜き出し開始位置(0が最初)
第3引数 抜き出す文字列の長さ

下の例では$0(1行まるごと)に対して、3文字目(0,1,2なので)から4文字抜き出したので

wkstと出力される

特定のフィールドに対して適用したい場合

match

説明 行が正規表現にマッチするかどうかを返す
第1引数 対象フィールド
第2引数 正規表現

行を読み取って、正規表現にマッチしたら正の真偽値を返す

sample.tsv

第4列目に「一」、「二」が含まれる場合に行を出力してみる

sub

説明 文字列を置換する
第1引数 マッチ部分(正規表現)
第2引数 置換する文字列
第3引数 置換するフィールド( 省略時:$0

2列目を”AAA”に置換してみる

gsub

説明 マッチした文字列を全置換
第1引数 マッチ部分(正規表現)
第2引数 置換する文字列
第3引数 置換するフィールド(省略時:$0

1列目をまるごと”AAA”に置換してみる

 

それでは、問題に行ってみましょー

問題

sample.tsv

  1. 各行の1列目を先頭から3文字抜き出して出力してください
  2. 2列目がGoldから始まる行を出力してください
  3. 2列目がShiroから始まる行を3列目を「,」(カンマ)を「-」(ハイフン)に変換して出力してください

 

 

 

 

 

 

 

それでは解答です

 

解答

各行の1列目を先頭から3文字抜き出して出力してください

 

2列目がGoldから始まる行を出力してください

 

2列目がShiroから始まる行を3列目を「,」(カンマ)を「-」(ハイフン)に変換して出力してください

matchとgsubを組み合わせましょう

 

まとめ

  • AWKでは文字列操作関数がある
  • substrでは文字列の切り抜きができる
  • matchでは行が正規表現にマッチしてるかを判定する
  • sub, gsubではマッチした正規表現を指定文字列に置換する

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です