特定の文字列以降を抽出したい (awk)コマンド

特定の文字列以降を抽出したい

以下のように”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)}