[Chester LUG] Help with a bash script
Stuart Burns
stuart.james.burns at gmail.com
Mon Oct 18 21:29:33 UTC 2010
Dave,
Your right I do. If your going, I'm buying ;)
Stu
On 18 October 2010 22:16, David Holden <dh at iucr.org> wrote:
>
>
> On 18/10/10 21:49, Stuart Burns wrote:
> > Dave, you must be a bash Jedi!
> >
> > It does work, and I can kind of trace how it works, but would you mind
> > explaining it a bit more ?
> > Cheers muchly. I owe you a beer, if your at the LUG next week ?
>
> You still owe me a meal matey ;)
>
> IFS=' ' this set the fields seperator for the "read".
>
> basically it then loops over the rows, gets the first column (based on
> the IFS) echo's it without newline, then for each of these "col1"s cats
> the whole file again and picks out col2 (using awk) that have matching
> "col1"s, then collapses them to one line using tr '\n' ' ', the final
> echo does the newline. This all has to then be sorted and uniq'ed to
> remove repetition.
>
> Cheers,
>
> Dave.
>
>
>
>
> >
> > Cheers muchly. I owe you a beer, if your at the LUG next week ?
> >
> >
> > On 18 October 2010 21:26, David Holden <dh at iucr.org
> > <mailto:dh at iucr.org>> wrote:
> >
> > Hi Stuart,
> >
> > VERY quick hack but it may work, the grep allows # comments
> >
> >
> > IFS=' ';
> >
> > datfile="1.dat"
> >
> > (
> > cat $datfile | sort | grep -v \# | while read data
> > do
> > data_array=(`echo "$data"`)
> > col1=${data_array[0]}
> > echo -n "$col1 "
> > cat $datfile | sort | grep "$col1" | awk '{print $2}' | tr '\n' '
> '
> > echo ""
> > done
> > ) | sort | uniq
> >
> >
> > Dave.
> >
> >
> > On 18/10/10 17:44, Stuart Burns wrote:
> > > Hi everyone,
> > >
> > > I am hoping someone can help me a bit here. I am creating a cript
> that
> > > deals with volume groups. However my bash skills fall short.
> > >
> > > I have a file that looks like this
> > >
> > > Vg955-01 /dev/diska1
> > > Vg955-01 /dev/diska2
> > > Vg978-01 /dev/disk45
> > > Vg978-04 /dev/disk13
> > >
> > > You get the picture.
> > >
> > > Now what I am trying to do is get all the vg parts followed by the
> > > constituent disks. Ie above should look like:
> > >
> > > Vg955-01 /dev/disk1a /dev/diska2
> > > Vg978-01 /dev/disk45
> > > Vg978-04 /dev/disk13
> > >
> > > I cant really think of an easy way to do it without resorting to
> perl.
> > > Can anyone help?
> > >
> > > Regards
> > >
> > > Stu
> > >
> > > _______________________________________________
> > > Chester mailing list
> > > Chester at mailman.lug.org.uk <mailto:Chester at mailman.lug.org.uk>
> > > https://mailman.lug.org.uk/mailman/listinfo/chester
> > >
> >
> > --
> > Dr David Holden. (dh at iucr.org <mailto:dh at iucr.org>)
> >
> > _______________________________________________
> > Chester mailing list
> > Chester at mailman.lug.org.uk <mailto:Chester at mailman.lug.org.uk>
> > https://mailman.lug.org.uk/mailman/listinfo/chester
> >
> >
> >
> >
> > _______________________________________________
> > Chester mailing list
> > Chester at mailman.lug.org.uk
> > https://mailman.lug.org.uk/mailman/listinfo/chester
>
> --
> Dr David Holden. (dh at iucr.org)
>
> _______________________________________________
> Chester mailing list
> Chester at mailman.lug.org.uk
> https://mailman.lug.org.uk/mailman/listinfo/chester
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.lug.org.uk/pipermail/chester/attachments/20101018/1df5df92/attachment.html>
More information about the Chester
mailing list