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 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]
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 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 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;iNF;i+=7) print $i,$(i+1),$(i+2),$(i+3),$(i+4),$(i+5),$(i+6) }' 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, 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;iNF;i+=7) print $i \t $(i+1) \t $(i+2) \t $(i+3) \t $(i+4) \t $(i+5) \t $(i+6) }' input 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
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 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;iNF;i+=7) print $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
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]