スポンサーリンク

substr()の使い方

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

下記の形式でsubstr()を使います。
文字列StrのN文字目からL文字切り出して、substr()の戻り値として返します。
awkは0オリジンではなく、先頭の開始文字は1文字目となることに注意が必要です。

substr(Str:対象文字列, N:切り出し開始位置, L:切り出す文字列の長さ)

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

		num = substr( $1, 3, 3)

サンプルコード

サンプルコードです。
in.txtの中身は下記のようになっています。1フィールド(列)目の"id"と"="の文字列が、データ解析などの用途によっては不要の場合があります。
その場合、真ん中の数字のみを切り出す必要があります。

 $ cat in.txt 
id001= A
id002= B
id003= C

その場合、1フィールド(列)目の3文字目から3文字切り出すことで、必要な文字列が抽出できます。

 $ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	{
		num = substr( $1, 3, 3)
		print num , $2
	}
'

実行すると、下記のように真ん中の数字のみが切り出されてprint出力されています。
1フィールド(列)目の"id"と"="の文字列が取り除がれているのが確認できます。
 $ ./sample.awk 
001 A
002 B
003 C

スポンサーリンク

index()を使って切り出し開始位置を文字で指定する

substr()は切り出し開始位置を先頭からの文字数で指定します。

index()を組み合わせて使うことで、切り出し開始位置を文字で指定することができるようになります。

例えば、”0″の文字列を検出した最初の位置から3文字分だけ切り出したい場合は、下記のように書くことができます。

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


num = substr( $1, index( $1, "0" ), 3)



index()とsubstr()を組み合わせて使う方法については、下記の記事を書いています
よろしければ参考にしてください。

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

スポンサーリンク