Grep for a Number in a String

Hi,

I have variable called fname that has the value M201401151630_P008949.csv.txt

I need to grep and store this in a variable called prcid for the number before ".csv" and the letter "P" excluding all zeros in the beginning.

Desired output 8949

Likewise for M201401151630_P108949.csv.txt

Desired ouput is 108949

uname -a 
SunOS mymach 5.10 Generic_148888-04 sun4v sparc SUNW,SPARC-Enterprise-T5220

Try

Use nawk on sunos

Use this

$ variable="M201401151630_P08949.csv.txt"

$ awk 'gsub(/.*_P|.*_P[0]+|\.csv.*/,x)' <<<$variable
8949

Hello,

Following may help also.

echo "M201401151630_P008949.csv.txt" | sed 's/\(.*\_P\)\(.*\)\(\.csv.*\)/\2/g'
 
echo "M201401151630_P108949.csv.txt" | sed 's/\(.*\_P\)\(.*\)\(\.csv.*\)/\2/g'
 

EDIT:

1 more approach with awk as follows.

echo "M201401151630_P108949.csv.txt" | awk 'gsub(/.*\_P/,X) gsub(/[[:alpha:]]/,Y) gsub(/[[:punct:]]/,Z) 1'

Thanks,
R. Singh

You can also try:

awk -F"_P" '{print int($2)}' file
1 Like

Elegant Solution! Franklin52 :b:

1 Like

Does not seem to yield the right output for fname=M201401151630_P008949.csv.txt.

pid=$(awk -F"_P" '{print int($2)}' $fname)
        echo "PID is : $pid"
Output: PID is 0

This is the output I get:

$ cat file
M201401151630_P008949.csv.txt
$
$ awk -F"_P" '{print int($2)}' file
8949
$

Frank's solution works, let me confirm first $fname is what in your program ? variable containing string ? or variable containing filename ? please do check don't blame

pid=$(awk -F"_P" '{print int($2)}' <<<$fname)

Right usage :

$ fname=M201401151630_P008949.csv.txt.

$ pid=$(awk -F"_P" '{print int($2)}' <<<$fname)

$ echo $pid
8949
1 Like

fname is a variable containing String not a filename.

Please suggest !!

Either

pid=$(awk -F"_P" '{print int($2)}' <<<$fname)

Or

$ pid=$(echo $fname | awk -F"_P" '{print int($2)}')

Sort of clumsy but may help:

echo M201401151630_P008949.csv.txt |sed -e 's/\(.*\)_P0*//g' -e 's/.csv.txt//g'
8949
echo M201401151630_P118949.csv.txt |sed 's/\(.*\)_P0*//g' |sed 's/.csv.txt//g'
118949

Does not work

http://www.unix.com/data:image/png;base64,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bash-3.2$ echo M201401120252_P004640.csv | awk -F"_P" '{print int($2)}'
0
bash-3.2$ awk -F"_P" '{print int($2)}' <<<M201401120252_P004640.csv
0

2nd one is wrong usage again, you are on solaris I said in #2 post that you have to use nawk

change awk to /usr/xpg4/bin/awk , /usr/xpg6/bin/awk , or nawk

--edit---

echo M201401120252_P004640.csv | /usr/xpg4/bin/awk -F"_P" '{print int($2)}'
echo M201401120252_P004640.csv | /usr/xpg6/bin/awk -F"_P" '{print int($2)}'
echo M201401120252_P004640.csv | nawk -F"_P" '{print int($2)}'
1 Like