特定の文字列以降を抽出したい
以下のように”abcd123ABCD=123ABCD”という文字列があったときに、"="以降の文字列を抽出する。
$echo "abcd123ABCD=123ABCD" | awk '{print substr($0,index($0,"=") )}' =123ABCD
"="からカウントして2文字だけを表示する場合は、以下のように記載すr。
$echo "abcd123ABCD=123ABCD" | awk '{print substr($0,index($0,"=") ,2)}' =1
"=”より前の文字列を表示したい場合は、以下のように記載する。
$echo "abcd123ABCD=123ABCD" | awk '{print substr($0,1,index($0,"=") )}' abcd123ABCD=
上記は、substrで$0列目の文字列の1文字目から検索を初めて、”=”がある箇所までを表示する意味となる。
indexに+1や-1の記載をすることで、表示する文字列の微調整が可能。 以下の場合-4しているので、4文字分表示する文字列が減る。
$ echo "abcd123ABCD=123ABCD" | awk '{print substr($0,1,index($0,"=")-4 )}' abcd123A
補足
Indexの使い方
対象文字列を先頭から検索し、検索文字列が検出された最初の位置を戻り値として返します。 index(対象文字列, 検索文字列) 例えば1フィールド(列)目の文字列を先頭から検索して、"="の文字列の検出位置を特定したい場合は下記のように書きます。
index( $1, "=" )
substrの使い方
第一引数は文字の列(x列目)、第二引数はスタートする位置、第三引数は文字列の長さです。第三引数は省略可能です。 以下の場合、1列目の、indexで検出する位置から2文字目まで、を表示します。
awk '{print substr($1,index($0,"=") ,2)}