awkのsubstr()で文字列の切り出し位置が文字数で特定できない場合には、index()関数と組み合わせると便利です。
スポンサーリンク
index()関数の使い方
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
下記の形式でindex()を書きます。
対象文字列を先頭から検索し、検索文字列が検出された最初の位置を戻り値として返します。
index(対象文字列, 検索文字列)
例えば、1フィールド(列)目の文字列を先頭から検索して、"0"の文字列の検出位置を特定したい場合は下記のように書きます。
index( $1, "0" )
substr()とindex()を組み合わせる方法をよく使います。
下記にサンプルコードも合わせてご紹介したいと思います。
スポンサーリンク
substr()とindex()を組み合わせる方法
更に、"0"の文字列を検出した最初の位置から3文字分だけ切り出したい場合は、下記のように書くことができます。
num = substr( $1, index( $1, "0" ), 3)
サンプルコード
サンプルコードになります。
in.txtの中身は下記のようだったとして、1フィールド(列)目の番号のみを切り出したいとします。
ここでは、1フィールド(列)目の番号の周りには、不必要な文字列があると仮定しています。
$ cat in.txt id001= 雨 ddidid002= 曇り idid003== 晴れ
in.txtに下記の前提条件があるとすれば
1.番号の先頭が必ず"0"から開始される
2.番号は三桁
下記のように、"0"の文字列を検出した最初の位置から3文字分だけ切り出せば良いことになります。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' { num = substr( $1, index( $1, "0" ), 3) print num , $2 } '
実行すると、下記のように番号のみ切り出されます。
$ ./sample.awk 001 雨 002 曇り 003 晴れ
スポンサーリンク