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
在手冊中的部分:match(string, regexp$$ , array $$),例子是:
echo foooobazbarrrrr | gawk '{ match($0, /(fo+).+(bar*)/, arr); print arr[1], arr[2]}'
哪個返回
foooo barrrrr
。那麼如何使用 awk(相當於
grep -o
)從字元串中提取多個數字?
使用 GNU awk 進行多字元 RS 和 RT:
$ 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