Re: OT: Shell Script using Awk

2008-11-02 Thread Jonathan McKeown
On Sunday 02 November 2008 03:21:55 David Allen wrote:
> My apologies for asking on this list, but I'm stuck without Perl and need
> to use awk to generate a report.
>
> I'm working with a large data set spread across multiple files, but to
> keep things simple, say I have A Very Long String that containing records,
> each delimited by a single space.  I need to print those records in
> columnar format, but with only 7 columns per line:
>
> record1  record2  record3  record4  record5  record6  record7
> record08 record09 record10 record11 record12 record13 record14

Are you dead set on using awk(1)?

Because my first thought would be rs(1).

cat inputfile | rs 0 7

To turn your space-separated entries into 7 columns. You may need some 
fiddling about (to avoid running out of memory, space on the line, etc).

This is one of my top three sadly-neglected BSD commands everyone should know 
more about, along with lam(1) and jot(1).

Jonathan
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-02 Thread Josh Paetzel
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

David Allen wrote:
> On 11/1/08, Sahil Tandon <[EMAIL PROTECTED]> wrote:
>> David Allen <[EMAIL PROTECTED]> wrote:
>>
>>> My apologies for asking on this list, but I'm stuck without Perl and need
>>> to use awk to generate a report.
>>>
>>> I'm working with a large data set spread across multiple files, but to
>>> keep things simple, say I have A Very Long String that containing records,
>>> each delimited by a single space.  I need to print those records in
>>> columnar format, but with only 7 columns per line:
>>>
>>> record1  record2  record3  record4  record5  record6  record7
>>> record08 record09 record10 record11 record12 record13 record14
>>> ...
>> A small sh script:
>>
>> #!/bin/sh
>> awk ' {
>> for (i=1; i<=NF; i++) {
>>  printf("%s ", $i)
>>  if (i % 7 == 0) { printf("\n") }
>> }
>> if (NF % 7 != 0) { printf("\n") }
>> } ' input
> 
> An elegant solution if ever I read one.  The mod operator should have
> been the first thing that came to mind.
> 
> I'm not sure whether I need a class in remedial math, or remedial awk,
> but either way, my thanks for the solution.

Just in case you've never discovered column, piping the output of this
to column -t will get you nice formatting for free.

- --
Thanks,

Josh Paetzel

PGP: 8A48 EF36 5E9F 4EDA 5ABC 11B4 26F9 01F1 27AF AECB
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkkNlBEACgkQJvkB8Sevrsv6lwCdHk5llGh4ZG+0CnQLARJDqGD9
0AEAniRtmjDNfKXHdsGAudA3uiwYFB9f
=IImT
-END PGP SIGNATURE-
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread David Allen
On 11/1/08, Sahil Tandon <[EMAIL PROTECTED]> wrote:
> David Allen <[EMAIL PROTECTED]> wrote:
>
>> My apologies for asking on this list, but I'm stuck without Perl and need
>> to use awk to generate a report.
>>
>> I'm working with a large data set spread across multiple files, but to
>> keep things simple, say I have A Very Long String that containing records,
>> each delimited by a single space.  I need to print those records in
>> columnar format, but with only 7 columns per line:
>>
>> record1  record2  record3  record4  record5  record6  record7
>> record08 record09 record10 record11 record12 record13 record14
>> ...
>
> A small sh script:
>
> #!/bin/sh
> awk ' {
> for (i=1; i<=NF; i++) {
>  printf("%s ", $i)
>  if (i % 7 == 0) { printf("\n") }
> }
> if (NF % 7 != 0) { printf("\n") }
> } ' input

An elegant solution if ever I read one.  The mod operator should have
been the first thing that came to mind.

I'm not sure whether I need a class in remedial math, or remedial awk,
but either way, my thanks for the solution.
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread David Allen
On 11/1/08, Gary Newcombe <[EMAIL PROTECTED]> wrote:
> On Sat, 1 Nov 2008 18:21:55 -0700, "David Allen"
> <[EMAIL PROTECTED]> wrote:
>
>> My apologies for asking on this list, but I'm stuck without Perl and need
>> to use awk to generate a report.
>>
>> I'm working with a large data set spread across multiple files, but to
>> keep things simple, say I have A Very Long String that containing records,
>> each delimited by a single space.  I need to print those records in
>> columnar format, but with only 7 columns per line:
>>
>> record1  record2  record3  record4  record5  record6  record7
>> record08 record09 record10 record11 record12 record13 record14
>> ...
>>
>> Should be simple, but I'm getting nowhere.
>
> Is this what you're after?
>
> $ cat input
> col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14
> col15 col16 
>
> cat input | awk -F\  '{for (i=1;i $i,$(i+1),$(i+2),$(i+3),$(i+4),$(i+5),$(i+6) }'

Bingo!   That was what similar to what I was starting with before
going off on a tangent.  Seems I screwed up the syntax and gave up too
early.

Thanks, Gary.
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread Sahil Tandon
David Allen <[EMAIL PROTECTED]> wrote:

> My apologies for asking on this list, but I'm stuck without Perl and need
> to use awk to generate a report.
> 
> I'm working with a large data set spread across multiple files, but to
> keep things simple, say I have A Very Long String that containing records,
> each delimited by a single space.  I need to print those records in
> columnar format, but with only 7 columns per line:
> 
> record1  record2  record3  record4  record5  record6  record7
> record08 record09 record10 record11 record12 record13 record14
> ...

A small sh script:

#!/bin/sh
awk ' {
for (i=1; i<=NF; i++) {
 printf("%s ", $i)
 if (i % 7 == 0) { printf("\n") }
}
if (NF % 7 != 0) { printf("\n") }
} ' input 

-- 
Sahil Tandon <[EMAIL PROTECTED]>
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread Gary Newcombe
On Sat, 1 Nov 2008 20:17:54 -0800, "David Allen"
<[EMAIL PROTECTED]> wrote:

> On 11/1/08, Jeremy Chadwick <[EMAIL PROTECTED]> wrote:
> > On Sat, Nov 01, 2008 at 06:21:55PM -0700, David Allen wrote:
> >> My apologies for asking on this list, but I'm stuck without Perl and need
> >> to use awk to generate a report.
> >>
> >> I'm working with a large data set spread across multiple files, but to
> >> keep things simple, say I have A Very Long String that containing records,
> >> each delimited by a single space.  I need to print those records in
> >> columnar format, but with only 7 columns per line:
> >>
> >> record1  record2  record3  record4  record5  record6  record7
> >> record08 record09 record10 record11 record12 record13 record14
> >> ...
> >>
> >> Should be simple, but I'm getting nowhere.
> >
> > $ cat input
> > col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14
> >
> > $ cat output.awk
> > {
> > print $1 " " $2 " "  $3 " "  $4 " "  $5 " "  $6 " "  $7
> > print $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14
> > }
> >
> > $ cat intput | awk -f output.awk
> > col1 col2 col3 col4 col5 col6 col7
> > col8 col9 col10 col11 col12 col13 col14
> 

Maybe you want them to line up too. Would using tabs be appropriate?
Maybe something like this?

awk -F\  '{for (i=1;i Thanks for the reply, Jeremy, but that approach would require an
> entirely manual approach, which isn't suitable for what I'm working
> with.  Writing a script that's the same size as the data I'm working
> with isn't an option.  ;-)
> ___
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "[EMAIL PROTECTED]"
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread Gary Newcombe
On Sat, 1 Nov 2008 18:21:55 -0700, "David Allen" <[EMAIL PROTECTED]> wrote:

> My apologies for asking on this list, but I'm stuck without Perl and need
> to use awk to generate a report.
> 
> I'm working with a large data set spread across multiple files, but to
> keep things simple, say I have A Very Long String that containing records,
> each delimited by a single space.  I need to print those records in
> columnar format, but with only 7 columns per line:
> 
> record1  record2  record3  record4  record5  record6  record7
> record08 record09 record10 record11 record12 record13 record14
> ...
> 
> Should be simple, but I'm getting nowhere.

Is this what you're after?

$ cat input
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 
col15 col16 

cat input | awk -F\  '{for (i=1;i 
> Thanks!
> 
> -- 
> David "promising never to do this again" Allen
> ___
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "[EMAIL PROTECTED]"
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread Jeremy Chadwick
On Sat, Nov 01, 2008 at 08:17:54PM -0800, David Allen wrote:
> On 11/1/08, Jeremy Chadwick <[EMAIL PROTECTED]> wrote:
> > On Sat, Nov 01, 2008 at 06:21:55PM -0700, David Allen wrote:
> >> My apologies for asking on this list, but I'm stuck without Perl and need
> >> to use awk to generate a report.
> >>
> >> I'm working with a large data set spread across multiple files, but to
> >> keep things simple, say I have A Very Long String that containing records,
> >> each delimited by a single space.  I need to print those records in
> >> columnar format, but with only 7 columns per line:
> >>
> >> record1  record2  record3  record4  record5  record6  record7
> >> record08 record09 record10 record11 record12 record13 record14
> >> ...
> >>
> >> Should be simple, but I'm getting nowhere.
> >
> > $ cat input
> > col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14
> >
> > $ cat output.awk
> > {
> > print $1 " " $2 " "  $3 " "  $4 " "  $5 " "  $6 " "  $7
> > print $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14
> > }
> >
> > $ cat intput | awk -f output.awk
> > col1 col2 col3 col4 col5 col6 col7
> > col8 col9 col10 col11 col12 col13 col14
> 
> Thanks for the reply, Jeremy, but that approach would require an
> entirely manual approach, which isn't suitable for what I'm working
> with.  Writing a script that's the same size as the data I'm working
> with isn't an option.  ;-)

I'm confused -- what's the problem?

-- 
| Jeremy Chadwickjdc at parodius.com |
| Parodius Networking   http://www.parodius.com/ |
| UNIX Systems Administrator  Mountain View, CA, USA |
| Making life hard for others since 1977.  PGP: 4BD6C0CB |

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread David Allen
On 11/1/08, Jeremy Chadwick <[EMAIL PROTECTED]> wrote:
> On Sat, Nov 01, 2008 at 06:21:55PM -0700, David Allen wrote:
>> My apologies for asking on this list, but I'm stuck without Perl and need
>> to use awk to generate a report.
>>
>> I'm working with a large data set spread across multiple files, but to
>> keep things simple, say I have A Very Long String that containing records,
>> each delimited by a single space.  I need to print those records in
>> columnar format, but with only 7 columns per line:
>>
>> record1  record2  record3  record4  record5  record6  record7
>> record08 record09 record10 record11 record12 record13 record14
>> ...
>>
>> Should be simple, but I'm getting nowhere.
>
> $ cat input
> col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14
>
> $ cat output.awk
> {
>   print $1 " " $2 " "  $3 " "  $4 " "  $5 " "  $6 " "  $7
>   print $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14
> }
>
> $ cat intput | awk -f output.awk
> col1 col2 col3 col4 col5 col6 col7
> col8 col9 col10 col11 col12 col13 col14

Thanks for the reply, Jeremy, but that approach would require an
entirely manual approach, which isn't suitable for what I'm working
with.  Writing a script that's the same size as the data I'm working
with isn't an option.  ;-)
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


Re: OT: Shell Script using Awk

2008-11-01 Thread Jeremy Chadwick
On Sat, Nov 01, 2008 at 06:21:55PM -0700, David Allen wrote:
> My apologies for asking on this list, but I'm stuck without Perl and need
> to use awk to generate a report.
> 
> I'm working with a large data set spread across multiple files, but to
> keep things simple, say I have A Very Long String that containing records,
> each delimited by a single space.  I need to print those records in
> columnar format, but with only 7 columns per line:
> 
> record1  record2  record3  record4  record5  record6  record7
> record08 record09 record10 record11 record12 record13 record14
> ...
> 
> Should be simple, but I'm getting nowhere.

$ cat input
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14

$ cat output.awk
{
print $1 " " $2 " "  $3 " "  $4 " "  $5 " "  $6 " "  $7
print $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14
}

$ cat intput | awk -f output.awk
col1 col2 col3 col4 col5 col6 col7
col8 col9 col10 col11 col12 col13 col14

-- 
| Jeremy Chadwickjdc at parodius.com |
| Parodius Networking   http://www.parodius.com/ |
| UNIX Systems Administrator  Mountain View, CA, USA |
| Making life hard for others since 1977.  PGP: 4BD6C0CB |

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"


OT: Shell Script using Awk

2008-11-01 Thread David Allen
My apologies for asking on this list, but I'm stuck without Perl and need
to use awk to generate a report.

I'm working with a large data set spread across multiple files, but to
keep things simple, say I have A Very Long String that containing records,
each delimited by a single space.  I need to print those records in
columnar format, but with only 7 columns per line:

record1  record2  record3  record4  record5  record6  record7
record08 record09 record10 record11 record12 record13 record14
...

Should be simple, but I'm getting nowhere.

Thanks!

-- 
David "promising never to do this again" Allen
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"