Show distinct values of a key from a single line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Show distinct values of a key from a single line
# 1  
Old 07-20-2012
Show distinct values of a key from a single line

Hi All,

I am newbie to linux. Can somebody help me with following requirement.

I have one huge line. I have to find out particular key/value pair to see the distinct value of that key.

Portion of the String:-
<?xml version="1.1" encoding="UTF-8"?> <Data><Val Ti="1342750845538" Du="0" De="blackberry8520_ver1RIM" Db="encyclopedia" Pdb="" Uq="0" Dq="0" qry="http://google.com/sdsds?q=dsds&dsdsds=dsds&ss?" ab="dsds" Dc="4" Te=" Ca="xxx" Sc="320.240" Us="" Cd="X"</Val><Val Ti="1342750845538" Du="0" De="blackberry8520_ver1RIM" Db="encyclopedia" Pdb="" Uq="0" Dq="0" qry="http://google.com/sdsds?q=dsds&dsdsds=dsds&ss?" ab="dsds" Dc="4" Te=" Ca="xxx" Sc="320.240" Us="" Cd="X"</Val> ..../>

Need to search :-

qry="ALL_THE_DISTINCT_VALUES"

So I need to find the values of qry parameter. This is going to be an URL.

Looking for your help.
Thanks in advance,
KM
# 2  
Old 07-21-2012
This will print all the required sections on separate lines:
Code:
awk '/^<\?xml/ {while(match($0,/qry="[^"]*"/)){print substr($0,RSTART+5,RLENGTH-6);sub(/qry="[^"]*"/,"")}}' inputfile


Last edited by elixir_sinari; 07-21-2012 at 03:47 AM..
This User Gave Thanks to elixir_sinari For This Post:
# 3  
Old 07-21-2012
See if this helps
Code:
tr "\"" "\n" < input | awk '/qry/ { getline url; printf "qry=\""; print url"\"" }'

Regards
Peasant.
# 4  
Old 07-23-2012
HI elixir_sinari,

Thanks a lot for your code. It is working as expected.
Can you give a little more time explaining your code, so that I can modify according my new requirements? What I did not understand from your code is the
i) regex(/Rp="[^"]*") Does [^"]* means all?
ii) RLENGTH-6 why 6?

Basically I need to pick up the corresponding Cd parameter along with it.

Thanks in advance.


KM

Last edited by kmajumder; 07-23-2012 at 06:44 PM..
# 5  
Old 07-24-2012
1) The regular expression qry="[^"]*" will match the literal qry=" followed by any number of any characters except a ", and followed by the literal ". This is needed as an expression such as .* will otherwise match as many characters as is possible including ".

2) Since you asked just about RLENGTH-6, I assume that you have idea about the match function and the system variables set by it. The number will depend on what you have as the "label" (qry in this case). As I am advancing the position in substr function by 5 (from RSTART, to match the length of qry-"), the length in substr will be reduced by 5 + 1(for the last ").
# 6  
Old 07-24-2012
Bug

Thank you for the explanation. Got it.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Fetch the values based on a Key using awk from single file

Hi, Please help to fetch the values for a key from below data format in linux. Sample Input Data Format 11055005|PurchaseCondition|GiftQuantity|1 11055005|PurchaseCondition|MinimumPurchase|400 11055005|GiftCatalogEntryIdentifier|Id|207328014 11429510|PurchaseCondition|GiftQuantity|1... (2 Replies)
Discussion started by: mohanalakshmi
2 Replies

2. Shell Programming and Scripting

Map values of blocks in a single line

Hello to all in forum, Maybe some awk expert could help me. I have this sample input: <MGISP:IMSIS=99995626; MT IMSI NUMBER SERIES ANALYSIS DATA OPERATING TABLE IMSIS M NA ANRES 99995626 6-77182 4 OBA-200 ... (9 Replies)
Discussion started by: Ophiuchus
9 Replies

3. Shell Programming and Scripting

Find distinct values

Hi, I have two files of the following format file1 chr1:345-456 chr2:123-456 chr2:455-678 chr3:456-789 chr3:444-555 file2 chr1:345-456 chr2:123-456 chr3:456-789 output (2 Replies)
Discussion started by: jacobs.smith
2 Replies

4. Shell Programming and Scripting

average of distinct values with awk

Hi guys, I am not an expert in shell and I need help with awk command. I have a file with values like 200 1 1 200 7 2 200 6 3 200 5 4 300 3 1 300 7 2 300 6 3 300 4 4 I need resulting file with averages of... (3 Replies)
Discussion started by: saif
3 Replies

5. Shell Programming and Scripting

distinct values of all the fields

I am a beginner to scripting, please help me in this regard. How do I create a script that provides a count of distinct values of all the fields in the pipe delimited file ? I have 20 different files with multiple columns in each file. I needed to write a generic script where I give the number... (2 Replies)
Discussion started by: vukkusila
2 Replies

6. UNIX for Dummies Questions & Answers

distinct values of all the fields

I am a beginner to scripting, please help me in this regard. How do I create a script that provides a count of distinct values of all the fields in the pipe delimited file ? I have 20 different files with multiple columns in each file. I needed to write a generic script where I give the number... (1 Reply)
Discussion started by: vukkusila
1 Replies

7. Shell Programming and Scripting

grep distinct values

this is a little more complex than that. I have a text file and I need to find all the distinct words that appear in a line after the word TABLESPACE when I grep for just the word tablespace, I get: how do i parse this a little better so i have a smaller file to read? This is just an... (4 Replies)
Discussion started by: guessingo
4 Replies

8. Shell Programming and Scripting

Getting Distinct values from second field in a file....

Hi I have a pipe delimited file. I am trying to grab the DISTINCT value from the second field. The file is something like: 1233|apple|ron 1234|apple|elephant 1235|egg|man the output I am trying to get from second field is apple,egg (apple coming only once) Thanks simi (4 Replies)
Discussion started by: simi28
4 Replies

9. Shell Programming and Scripting

Loop through only the distinct values in a file

Datafile has the following data seperated by : FIELD1:FIELD2:FIELD3 D1:/opt/9.1.9:Y D2:/opt/10.1.10:Y D3:/opt/9.1.9:Y D4:/opt/8.1.8:Y D5:/opt/8.1.8:Y D6:/opt/9.1.9:Y D7:/opt/9.1.9:Y D8:/opt/10.1.10:Y D9:/opt/9.1.9:Y D10:/opt/10.1.10:Y I want to do some operations only on the distinct... (2 Replies)
Discussion started by: pbekal
2 Replies

10. Shell Programming and Scripting

Read line with a single key press...

I would really like to have a script that will accept the key press from the user with out having to press the enter key afterwards. i.e. echo "Press Y to print \c" read YesNo At this point the user has to press the enter key to continue. Is there a way to accept the key press from the... (3 Replies)
Discussion started by: jagannatha
3 Replies
Login or Register to Ask a Question