Extract info from csv


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extract info from csv
# 1  
Old 09-09-2008
Extract info from csv

I have some input file, which contains some lines which are comma separated. Eg.

a,b,id=999],d
d,f,g,id=345],x
x,y,x,s,id=677],y

I run a loop to read the lines one by one. What i want is to extract the value on the right of id=. I cannot do it by Awk, since the column number is not fixed. So what i need is to first search and match "id=" pattern, and then print the number following it, until ']' is encountered.
Any way to do this??
# 2  
Old 09-09-2008
Try this
Code:
sed 's/.*=\(.*\)].*/\1/' file

# 3  
Old 09-09-2008
Stupendous!
Works like a charm, Thanks!

If you dont mind, can you just explain a little bit of that sed command you used, agn?

I have a beginner level of understanding. What i read in a book about sed like if there is an expression,
sed 's/\([a-z]*\).*/\1/'
then \1 remembers the second part of the pattern matched.

But in your answer you have used 3 *s. so that means three patterns? Also could you explain why we use '\' before parenthesis? And what is the significance of the expression inside parenthesis?
# 4  
Old 09-09-2008
sed 's/.*=\(.*\)].*/\1/'

s/find/replace/ - substitute 'find' with 'replace'
s/.*=\(.*\)].*/\1/ - match till '='
s/.*=\(.*\)].*/\1/ - match till ']' . We escape the parenthesis as () is used for grouping in regex.
s/.*=\(.*\)].*/\1/ - match the rest of the string
s/.*=\(.*\)].*/\1/ - replace the pattern (the 'find' part) with what's inside the parenthesis (in the 'find' part). \1 contains the string that matched the regex inside the first parenthesis. \2 contains the match found by second parenthesis, \3 the third and so on.

Hope that helps.
# 5  
Old 09-09-2008
Quote:
Originally Posted by indianjassi
I cannot do it by Awk, since the column number is not fixed.
if its not fixed, you can go through the fields one by one
Code:
awk -F"," '
{
 for(i=1;i<=NF;i++) {
    if ( $i ~ /id/) {
      gsub(/[^0-9]+/,"",$i)
      print $i
    }
 }
}
' file

#

# 6  
Old 09-09-2008
Another one with awk: this also doesn't look for coulumn to be of fixed size.

Quote:
awk '{print substr($0, index($0,"=")+1,(index($0,"]") - index($0,"=")-1)); }' filename
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with awk to extract additional info

Hi I use multipath linux command to get LUNs info and find out if any failed. # multipath -ll >/tmp/mpfail # cat /tmp/mpfail multipath.conf line 109, invalid keyword: user_friendly_names multipath.conf line 153, invalid keyword: user_friendly_names multipath.conf line 193, invalid... (4 Replies)
Discussion started by: prvnrk
4 Replies

2. Shell Programming and Scripting

Extract info from sar output

Hi I have an output of sarcommand which is as follows: 10:22:18 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s 10:23:18 0 398 100 5 13 64 0 0 10:24:18 0 332 100 5 15 65 0 0 10:25:18 0 ... (7 Replies)
Discussion started by: fretagi
7 Replies

3. Shell Programming and Scripting

Compare two files and extract info

Hello, I have two files which look like this File 1 Name test1 status P Gene1 0.00236753 1 1.00E-01 Gene2 0.134187 2 2.00E-01 Gene3 0.000608716 2 3.00E-01 Gene4 0.0016234 1 4.00E-01 Gene5 0.000665868 2 5.00E-01and file 2 No Pos ... (2 Replies)
Discussion started by: nans
2 Replies

4. Shell Programming and Scripting

How to extract info from pings.?

Hi guys, new to this forum. I am currently trying to extract the times from pinging a domain and list the top 3 and then also do the opposite i.e. list the bottom 3. so if I had this as a ping result (the bold part is what I want): 64 bytes from 193.120.166.90: icmp_seq=10 ttl=128 time=34.8... (5 Replies)
Discussion started by: acoding
5 Replies

5. Shell Programming and Scripting

how to extract info from a file using awk

Dear all I have a file call interfaces.txt Filename: interfaces.txt How can I extract the information at below? ABC_DB_001 hostname1 20901 ABC_DB_002 hostname2 20903 ABC_DB_003 hostname3 20905 Currently I am using a very stupid method grep ^ABC interfaces.txt > name.txt grep... (3 Replies)
Discussion started by: on9west
3 Replies

6. IP Networking

How to extract NIC and other info ,given Ip

Hi all, I am working on a networking project that requires me to find out the NIC on that particular machine and many more things. Now Given the IP and the subnet. I would like to know how we can extract such informations? I am talking in exclusivity to Solaris boxes!! The required... (6 Replies)
Discussion started by: wrapster
6 Replies

7. AIX

Extract info

Anyone have a better idea to automate extraction of info like ... "uname" "ifconfig" "ps efl" "netstat -ao" etc. from several hundred aix, solaris, red hat boxes? without logging into each box and manually performing these tasks and dumping them to individual files? thanks for any input (1 Reply)
Discussion started by: chm0dvii
1 Replies

8. AIX

need to extract info from log files

hi guys i need to extract information from log files generated by an application. log file has the following lines for each process.. ---------------------------------------------- Fri Aug 03 12:06:43 WST 2007 INFO: Running project PROJECT1 Fri Aug 03 12:06:43 WST 2007 INFO: Source Files... (7 Replies)
Discussion started by: kirantalla
7 Replies

9. UNIX for Dummies Questions & Answers

using cut to extract info

a simple question, how can i use cut (after using grep) to extract the last four digits on a line. so say i had a string http://blabla:9020, how would I extract the port?? -Fez (4 Replies)
Discussion started by: hafhaq
4 Replies
Login or Register to Ask a Question