Visit Our UNIX and Linux User Community


Extract specific text from variable and put it into array


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extract specific text from variable and put it into array
# 1  
Old 09-08-2012
Extract specific text from variable and put it into array

Dear community,
I have to do something too hard for me Smilie. I hope you can help me.

This is an output coming from Oracle query, stored in a file called query.out, there are many rows, but I read them, one by one, using while/read/done. Assuming each row is contained into $line variable that are valued as:
Code:
1234[12345678=3]; 9999[98765432=3]; 1234[57382939=3]; 8888[984903020=3]; 77777[0583758738=3]; 8888[670986767=3]

What I need to do is extract the following value in uniquely way.

What I need to extract (in bold/red):
Code:
1234[12345678=3]; 54321[98765432=3]; 1234[57382939=3]; 8888[984903020=3]; 77777[0583758738=3]; 8888[670986767=3]

In this case I have 6 occurrences, but sure this can be lower or greater (depends on oracle output query).

What I'm expecting from extraction:
Code:
1234
54321
8888
77777

These values should go into an array (later I'll cycle the array to put them into a log file togheter with other info).

Hope someone can help me to solve this since I'm gonna crazy! Smilie
# 2  
Old 09-08-2012
Code:
sed 's/;/\n/g' filename | sed 's/\[/\n\[/g' | grep -v '^\[' | sed 's/^ *//'


Last edited by Scott; 11-13-2012 at 12:47 AM.. Reason: Code tags
# 3  
Old 09-08-2012
Thanks rajkumarin, this works to extract the right value, but extract all the values and not in uniquely way. Plus, is it possibile to "sed" a variable instead of file (text)?

Code:
# sed 's/;/\n/g' text | sed 's/\[/\n\[/g' | grep -v '^\[' | sed 's/^ *//'
1234
54321
1234
8888
77777
8888

# 4  
Old 09-08-2012
Code:
echo '1234[12345678=3]; 54321[98765432=3]; 1234[57382939=3]; 8888[984903020=3]; 77777[0583758738=3]; 8888[670986767=3]'|awk -F\; '{for(i=1;i<=NF;i++) if(!c[$i+0]++) print $i+0}'


Last edited by elixir_sinari; 09-08-2012 at 04:19 AM..
This User Gave Thanks to elixir_sinari For This Post:
# 5  
Old 09-08-2012
@elixir sinary, you are the master!!! All in one row!!! Smilie

Just a stupid question (I know), how can I put the result values into an array?
I can redirect the result to another tmp file and then read it row by row, but I prefer to use an array to read with a for cycle...
# 6  
Old 09-08-2012
Code:
line='1234[12345678=3]; 54321[98765432=3]; 1234[57382939=3]; 8888[984903020=3]; 77777[0583758738=3]; 8888[670986767=3]'
arr=($(echo "$line"|awk -F\; '{for(i=1;i<=NF;i++) if(!c[$i+0]++) print $i+0}'))
for i in "${arr[@]}"
do
 echo "I AM " $i
done


Last edited by elixir_sinari; 09-08-2012 at 04:19 AM..
This User Gave Thanks to elixir_sinari For This Post:
# 7  
Old 09-08-2012
Dear elixir sinary,
I'm experiencing problem
Code:
#echo '1234[12345678=3]; 54321[98765432=3]; 8888[984903020=3]'|awk -F\; '{for(i=1;i<NF;i++) if(!c[$i+0]++) print $i+0}'
1234
54321

As you can see the latest value is not shown, this because most probably it miss the ';' at the end.
This works:
Code:
# echo '1234[12345678=3]; 54321[98765432=3]; 8888[984903020=3];'|awk -F\; '{for(i=1;i<NF;i++) if(!c[$i+0]++) print $i+0}'
1234
54321
8888

I can simply add manually the ; but do you have any other idea?

Previous Thread | Next Thread
Test Your Knowledge in Computers #414
Difficulty: Easy
JavaScript is a high-level, interpreted scripting language that conforms to the ECMAScript specification.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing specific and incrementing lines of text from file via variable

This is part of a larger script where I need to pass only 1 line of a file to the script, based on a variable and not a direct reference. As part of a for loop : # for((line=0;line<50;line++)); do # awk ‘NR==$line' PhraseList.txt; done ... (5 Replies)
Discussion started by: Seth
5 Replies

2. Shell Programming and Scripting

Extract specific line in an html file starting and ending with specific pattern to a text file

Hi This is my first post and I'm just a beginner. So please be nice to me. I have a couple of html files where a pattern beginning with "http://www.site.com" and ending with "/resource.dat" is present on every 241st line. How do I extract this to a new text file? I have tried sed -n 241,241p... (13 Replies)
Discussion started by: dejavo
13 Replies

3. Shell Programming and Scripting

Extract text from file then write variable

I have a text file that has many lines, and for each line I need to extract different sections of text, then write several variables from the data. I can split out the various sections by selecting their position on each line as the column sizes will never vary. A sample of my text file is below... (2 Replies)
Discussion started by: kcpoole
2 Replies

4. Shell Programming and Scripting

Shell script to put delimiter for a no delimiter variable length text file

Hi, I have a No Delimiter variable length text file with following schema - Column Name Data length Firstname 5 Lastname 5 age 3 phoneno1 10 phoneno2 10 phoneno3 10 sample data - ... (16 Replies)
Discussion started by: Gaurav Martha
16 Replies

5. Shell Programming and Scripting

perl, put one array into many array when field is equal to sth

Hi Everyone, #!/usr/bin/perl use strict; use warnings; my @test=("a;b;qqq;c;d","a;b;ggg;c;d","a;b;qqq;c;d"); would like to split the @test array into two array: @test1=(("a;b;qqq;c;d","a;b;qqq;c;d"); and @test2=("a;b;ggg;c;d"); means search for 3rd filed. Thanks find the... (0 Replies)
Discussion started by: jimmy_y
0 Replies

6. Shell Programming and Scripting

Put output into an array

I'm trying to take the output of an environment that has multiple strings ex. # echo $SSH_CLIENT 192.168.1.1 57039 22 I need that IP... so I can set it to another environment. Thank you (3 Replies)
Discussion started by: adelsin
3 Replies

7. UNIX for Advanced & Expert Users

bash/grep/awk/sed: How to extract every appearance of text between two specific strings

I have a text wich looks like this: clid=2 cid=6 client_database_id=35 client_nickname=Peter client_type=0|clid=3 cid=22 client_database_id=57 client_nickname=Paul client_type=0|clid=5 cid=22 client_database_id=7 client_nickname=Mary client_type=0|clid=6 cid=22 client_database_id=6... (3 Replies)
Discussion started by: Pioneer1976
3 Replies

8. Shell Programming and Scripting

Extract lines of text based on a specific keyword

I regularly extract lines of text from files based on the presence of a particular keyword; I place the extracted lines into another text file. This takes about 2 hours to complete using the "sort" command then Kate's find & highlight facility. I've been reading the forum & googling and can find... (4 Replies)
Discussion started by: DionDeVille
4 Replies

9. Shell Programming and Scripting

extract the lines between specific line number from a text file

Hi I want to extract certain text between two line numbers like 23234234324 and 54446655567567 How do I do this with a simple sed or awk command? Thank you. ---------- Post updated at 06:16 PM ---------- Previous update was at 05:55 PM ---------- found it: sed -n '#1,#2p'... (1 Reply)
Discussion started by: return_user
1 Replies

10. UNIX for Dummies Questions & Answers

extract some specific text file urgent pls

i have a big text file . i want to create new file as extract some specific text from the big file i am using hp ux please help (2 Replies)
Discussion started by: reyazan
2 Replies

Featured Tech Videos