[kwlug-disc] bash question tab separated values

Raul Suarez rarsa at yahoo.com
Fri Nov 6 08:26:44 EST 2009


An alternative is to read the values to an array.

oldifs="${IFS}"
IFS="<TAB>"
while read -a myArray
do
  #do whatever with the array. i.e.
  echo ${myArray[1]}
done < myfile.txt
IFS="${oldifs}"

Be sure to configure your editor to save tabs as tabs, not as spaces

Raul Suarez

Technology consultant
Software, Hardware and Practices
_________________
http://rarsa.blogspot.com/ 
An eclectic collection of random thoughts


--- On Thu, 11/5/09, Robert P. J. Day <rpjday at crashcourse.ca> wrote:

> From: Robert P. J. Day <rpjday at crashcourse.ca>
> Subject: Re: [kwlug-disc] bash question tab separated values
> To: "KWLUG discussion" <kwlug-disc at kwlug.org>
> Received: Thursday, November 5, 2009, 11:37 PM
> On Thu, 5 Nov 2009, Khalid Baheyeldin
> wrote:
> 
> >
> > On Thu, Nov 5, 2009 at 2:46 PM, Richard Weait <richard at weait.com>
> wrote:
> >       I'm reading lines from
> a tab-separated-value text file.  Ten values
> >       per line.  I'd like to
> load them into ten variables for further
> >       processing, then
> output.
> >
> >       It ain't working for
> me.  Looks like the tabs are being silently
> >       dropped then my cut
> -f3, for example, returns the complete line.
> >
> >       Some fields include
> spaces, so I'd rather continue to split on
> >       tabs.
> >       How do I keep the tabs?
>  How should I be reading these lines?
> >
> >
> > Can you process in awk?
> >
> > If so, then just use:
> >
> > awk -F"\t" '{print $1; ... something else; }'
> yourfile.txt
> >
> > If you still insist on doing it in shell, then do
> this:
> >
> > exec 3>&1 < file.txt
> > while true
> > do
> >   read LINE
> >   if [ "$?" != 0 ]; then  # It is an End Of File
> condition
> >     break
> >   fi
> >
> >   FIELD0=`echo "$LINE" | awk -F"\t" '{print $1}'`
> >   FIELD1=`echo "$LINE" | awk -F"\t" '{print $2}'`
> >   FIELD2=`echo "$LINE" | awk -F"\t" '{print $2}'`
> >
> >   echo $FIELD0
> >   echo $FIELD2
> > done
> > exec <&3 3<&-
> 
>   can't you just set the internal field separator
> before reading in
> the file in a bash loop:
> 
>   IFS="<TAB>"
>   while read v1 v2 v3 ...etc... v10 ; do
>     ... whatever with v1 v2 v3 ...
>   done < inputfile
> 
>   the proper way to set the IFS would be (from
> experience), typing the
> first quote, then a ^v, followed by pressing the TAB key,
> then
> finishing off with the closing quote.  the ^v means
> "take the next
> character absolutely literally."
> 
>   i just tested that and it seems to work.
> 
> rday
> --
> 
> ========================================================================
> Robert P. J. Day           
>                
>    Waterloo, Ontario, CANADA
> 
>             Linux Consulting,
> Training and Kernel Pedantry.
> 
> Web page:             
>                
>             http://crashcourse.ca
> Twitter:             
>                
>          http://twitter.com/rpjday
> ========================================================================
> -----Inline Attachment Follows-----
> 
> _______________________________________________
> kwlug-disc_kwlug.org mailing list
> kwlug-disc_kwlug.org at kwlug.org
> http://astoria.ccjclearline.com/mailman/listinfo/kwlug-disc_kwlug.org
> 


      __________________________________________________________________
Get the name you've always wanted @ymail.com or @rocketmail.com! Go to http://ca.promos.yahoo.com/jacko/



More information about the kwlug-disc_kwlug.org mailing list