Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How can I do a "grep -v" equivalent in Import[]?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg91849] Re: How can I do a "grep -v" equivalent in Import[]?
  • From: David Bailey <dave at Remove_Thisdbailey.co.uk>
  • Date: Wed, 10 Sep 2008 05:08:30 -0400 (EDT)
  • References: <g9t6mq$j8s$1@smc.vnet.net> <200809081010.GAA27650@smc.vnet.net> <ga5kov$r8g$1@smc.vnet.net>

Jason Ledbetter wrote:
> Valid point:
> This will likely line wrap:
> 
> --snip--
> CPU   NFS  CIFS  HTTP   Total    Net kB/s   Disk kB/s     Tape kB/s Cache
> Cache  CP   CP Disk    FCP iSCSI   FCP  kB/s
>                                  in   out   read  write  read write   age
> hit time  ty util                 in   out
> 24%     0   741     0     767  9381  6144  88815      0     0 81011     9
> 98%   0%  -   31%      0    26     0     0
> --snip--
> 
> I'm trying to avoid importing through a pipe and I'm trying to avoid
> preprocessing the data (for no real reason other than trying to get a handle
> on data processing in Mathematica).
> 
> I've done the following:
> 
> importTemp = Import[ToFileName[Directory[], "input.txt"], {"Lines"}];
> regexMatch = "^\d{2}.*";
> sysstat = StringCases[importTemp, RegularExpression[regexMatch]];
> 
> which gets me ALMOST what I'm looking for.... I end up with the the
> non-matched lines being empty data sets which Part:partw doesn't like.
> 
> e.g. output is like this:
> 
> {{}, {}, {"24"}, {"29"}, ...
> 
> 
> Thank you very much for the replies to date.
> 
> -jbl
> 
I am still not 100% sure I know what you want to do, but assuming you 
want just the first two digits of lines that start with 2 digits,

I am still not 100% sure I know what you want to do, but assuming you 
want just the first two digits of lines that start with 2 digits,

tmp2 = Select[importTemp,
   StringMatchQ[#, DigitCharacter ~~ DigitCharacter ~~ __] &];

Map[StringTake[#, 2] &, tmp2]

Alternatively, you could clean up the output that you have obtained already:

{{}, {}, {"24"}, {"29"}} /. {} :> Sequence @@ {}

With all the new string matching functionality, it is rarely necessary 
to resort to C preprocessing, unless speed is critical (i.e. your input 
file is very big!).

David Bailey
http://www.dbaileyconsultancy.co.uk


  • Prev by Date: Re: Trying to speed up a function
  • Next by Date: Re: Real and Complex Roots presented in a single plot
  • Previous by thread: Re: How can I do a "grep -v" equivalent in Import[]?
  • Next by thread: Re: How can I do a "grep -v" equivalent in Import[]?