Re: OT: Shell Script using Awk
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
-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
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
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
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
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
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
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
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
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]"