index is a built-in function within awk
index(s1,s2) -- The first location of s2 within s1; 0 if not found
Suppose:
$ s1="Trying to see if 172.22.23.12 is reachable; ping successful"
And substring s2:
$ s2="ping successful"
Now to find the index of s2 in s1:
$ awk -v a="$s1" -v b="$s2" 'BEGIN{print index(a,b)}'
45
Using index with awk substr function:
We will extract the pattern "ing" from the substring s2 using awk substr function like this:
$ awk -v a="$s1" -v b="$s2" 'BEGIN{print substr(b,2,3)}'
ing
Now we will find the first index where "ing" occurs in parent string s1 like this:
$ awk -v a="$s1" -v b="$s2" 'BEGIN{print index(a,substr(b,2,3))}'
4
6 comments:
If you use bash 4,x then you can source an string library written in bash:
http://sourceforge.net/projects/oobash/
Some examples for index operations:
String a abcda
a.indexOf a
>>>0
a.lastIndexOf a
>>>4
There are a lot of string methods you can use in your scripts after sourcing the bash file.
@Philluder thanks for this great tip.
match=${s1%%*$s2*}
${match:+:} eval "idx=$(expr "x${s1%$s2*}" : '.*')"
echo "${idx-0}"
Provided your IFS does not comprise colon the below can function as an index() func
s1="Trying to see if 172.22.23.12 is reachable; ping successful dee doo"
s2="ping successful"
match=${s1%%*"$s2"*}
${match:+:} eval "idx='$(expr "x${s1%"$s2"*}" : '.*')'"
echo "${idx-0}"
Post a Comment