Debayan
Debayan

Reputation: 47

How to search through a string and extract the required value in unix

I have a string like below

QUERY_RESULT='88371087|COB-A#2014-04-22,COB-C#2014-04-22,2014-04-22,2014-04-23 88354188|COB-W#2014-04-22,2014-04-22,2014-04-22 88319898|COB-X#2014-04-22,COB-K#2014-04-22,2014-04-22,2014-04-22'

This is a result taken by querying the database. Now I want to take all the values before the pipe and separate it with coma. So the output needed is :

A='88371087,88354188,88319898'

The db values can be different every time, there can be just one value or 2 or more values How do I do it.

Upvotes: 1

Views: 70

Answers (4)

Fritz G. Mehner
Fritz G. Mehner

Reputation: 17198

Bash only.

shopt -s extglob

result=${QUERY_RESULT//|+([^ ]) /,}
result=${result%|*}

echo  "$result"

Output:

88371087,88354188,88319898

Upvotes: 0

glenn jackman
glenn jackman

Reputation: 247250

$ words=( $( grep -oP '\S+(?=\|)' <<< "$QUERY_RESULT") )
$ A=$(IFS=,; echo "${words[*]}")
$ echo "$A"
88371087,88354188,88319898

Upvotes: 0

abrusa
abrusa

Reputation: 106

Using awk

A=`echo $QUERY_RESULT | awk '{ nreg=split($0,reg);for(i=1;i<=nreg;i++){split(reg[i],fld,"|");printf("%s%s",(i==1?"":","),fld[1]);}}'`

echo $A

88371087,88354188,88319898

Upvotes: 1

anubhava
anubhava

Reputation: 786359

Using grep -oP

grep -oP '(^| )\K[^|]+' <<< "$QUERY_RESULT"
88371087
88354188
88319898

OR to get comma separated value:

A=$(grep -oP '(^| )\K[^|]+' <<< "$QUERY_RESULT"|sed '$!s/$/,/'|tr -d '\n')
echo "$A"
88371087,88354188,88319898

Upvotes: 1

Related Questions