Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Awk > Re: Extract a f...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 5 of 7 Topic 2184 of 2312
Post > Topic >>

Re: Extract a field in a string collection

by Ed Morton <morton@[EMAIL PROTECTED] > Mar 11, 2008 at 12:29 AM

On 3/10/2008 7:46 PM, Scott S. McCoy wrote:
> On Mon, 10 Mar 2008 17:26:33 -0700, Tiago Peczenyj wrote:
> 
> 
>>On 10 mar, 21:20, Radu <raduco...@[EMAIL PROTECTED]
> wrote:
>>
>>>Hi guys,
>>>
>>>From a .csv file, I want to extract the last field (say it's $15, or, I
>>>guess, $NF) and make it like:
>>>'12345', '23456', '34567' (comma separated strings). The purpose is to
>>>use the list in a select request in the WHERE clause (WHERE field IN
>>>('12345', '23456', '34567'). The IN range would be therefore the file
>>>the AWK will sent the values to.
>>>
>>>Thanks,
>>>
>>>Radu
>>
>>try a awk file like this:
>>BEGIN{ printf("(WHERE field in ("); } { printf("'%s'",$NF); }
>>END{ printf(")"); }
>>
>>OR
>>
>>{ list[$NF]; }
>>END{
>>  printf("(WHERE field in (");
>>  for(i in list)
>>     printf("'%s'",i);
>>  printf(")");
>>}
> 
> 
> None of this keeps the comma separator.
> 
> scott@[EMAIL PROTECTED]
> cat foo.awk
> function join(array, start, end, sep,    result, i)
> {
>     if (sep == "")
>        sep = " "
>     else if (sep == SUBSEP) # magic value
>        sep = ""
>     result = array[start]
>     for (i = start + 1; i <= end; i++)
>         result = result sep array[i]
>     return result
> }
> 
> BEGIN {
>    # Assuming it's a comma or tab using CSV
>    FS = ",|\t"
> }
> { list[NR] = $NF }
> END { 
>   printf "WHERE field IN ('%s')\n", join(list, 1, NR, "', '")
> }
> 
> scott@[EMAIL PROTECTED]
> awk -f foo.awk
> foo,bar,baz,bin
> baz,bash,bit,foo
> bit,bash,blitz,bar
> WHERE field IN ('bin', 'foo', 'bar')
> scott@[EMAIL PROTECTED]
> cat foo.awk
> 

It doesn't need to be that complicated if that's the style of input:

$ awk -F, -v q=\' '{o=o s q $NF q; s=", "}END{printf "WHERE field IN
(%s)\n",o}'
file
WHERE field IN ('bin', 'foo', 'bar')

	Ed.
 




 7 Posts in Topic:
Extract a field in a string collection
Radu <raducocos@[EMAIL  2008-03-10 17:20:34 
Re: Extract a field in a string collection
Tiago Peczenyj <tiago.  2008-03-10 17:26:33 
Re: Extract a field in a string collection
Ed Morton <morton@[EMA  2008-03-11 00:20:35 
Re: Extract a field in a string collection
"Scott S. McCoy"  2008-03-11 00:46:42 
Re: Extract a field in a string collection
Ed Morton <morton@[EMA  2008-03-11 00:29:04 
Re: Extract a field in a string collection
"Scott S. McCoy"  2008-03-11 00:49:14 
Re: Extract a field in a string collection
Ed Morton <morton@[EMA  2008-03-10 21:24:49 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sun Jul 20 17:35:10 CDT 2008.