awk文字列から数値を抽出する

awk文字列から数値を抽出する

関連する質問がいくつかありますが、awk問題を解決するために使用できないようです。

echo "blah foo123bar234blah" | egrep -o '([0-9]+)' 

返品

123
234 

しかし、

echo "blah foo123bar234blah" | 
    awk '{ match($0,/([0-9]+)/,m); print m[0], m[1],m[2]}'    

123 123合計を返します。

echo "blah foo123bar234blah" | 
    awk '{ match($0,/([0-9]+).+([0-9]+)/,m); print m[0], m[1],m[2]}'    

返品 123bar234 123 4

存在する手動、セクションで:一致(文字列、正規表現[、配列])、例は次のとおりです。

echo foooobazbarrrrr |
    gawk '{ match($0, /(fo+).+(bar*)/, arr); print arr[1], arr[2]}'

返品foooo barrrrr

それでは、awk(と同じ)を使用してgrep -o文字列から複数の数字をどのように抽出しますか?

ベストアンサー1

複数文字のRSとRTにGNU awkを使用する:

$ echo "blah foo123bar234blah" |
    awk -v RS='[0-9]+' '$0=RT'
123
234

awkを使用してください(強力な一般的なアプローチではなく、単純な角括弧式を使用する方が簡単なので、否定するのではなく元の正規表現を維持してください)。

$ echo "blah foo123bar234blah" |
    awk -v FS='\n' '{gsub(/[0-9]+/,FS"&"FS); for (i=2;i<=NF;i+=2) print $i}'
123
234

または:

$ echo "blah foo123bar234blah" |
    awk '{ while (match($0,/[0-9]+/) ) {print substr($0,RSTART,RLENGTH); $0=substr($0,RSTART+RLENGTH)} }'
123
234

おすすめ記事