Mailinglist Archive: opensuse (3135 mails)

< Previous Next >
Re: [opensuse] filtering
  • From: Vince Oliver <vince@xxxxxxxxxxxxxxx>
  • Date: Sat, 10 Mar 2007 13:47:54 +0100 (CET)
  • Message-id: <Pine.LNX.4.62.0703101342590.7868@xxxxxxxxxxxxxx>


On Sat, 10 Mar 2007, Anders Johansson wrote:

On Saturday 10 March 2007 12:28, Vince Oliver wrote:
On Sat, 10 Mar 2007, Anders Johansson wrote:
On Saturday 10 March 2007 08:39, Randall R Schulz wrote:
On Friday 09 March 2007 16:32, Anders Johansson wrote:
...

I'm not very happy with the string tests, but I couldn't find a bash
function that returned true on substring match. If anyone can think
of a cleaner way of doing it, I'd love to know it

Check out the [[ value = pattern ]] tests. There are options for both
glob and RE interpretation of "pattern."

Cool, that works, thanks

So

for dir in DH*; do
 for file in `find $dir -type f -name more\*.dat`; do
    [[ $file =~ t\(10\|9\) ]] || head -5 $file >> $dir/list;
 done;
done

Thanks.  But I do not want the whole content of files in 'list' just 6th,
7th columns and file names (as you mat read in awk command bellow)


for dir in DH* ; do
for file in `find $dir -type f -name "more*data.dat" -exec egrep -vq
'\<t(9|10)\>' {} \; -print`; do
awk 'BEGIN{FS=","}{if(NR>1 && NR<7){
f=n=FILENAME;sub(/[^/]+$/,"list",f);sub(/.*\//,"",n);print $6,$7,n>>f}}'
$file
done
done

this command works fine but filtering out lines with egrep does not work

No. It wouldn't take much to add my test to your awk, but I still think awk is
the wrong tool to use for something so light

for dir in DH*; do
 for file in `find $dir -type f -name more\*.dat`; do
   [[ $file =~ t\(10\|9\) ]] || for i in 1 2 3 4 5; do
     IFS=' ' read -a line;
     echo ${line[5]} ${line[6]} $(basename $file) >> $dir/list;
   done < $file;
 done;
done

There are very few things you can't do with bash alone.

I just wish I could think of a way to eliminate the 'find'. That one really
annoys me




It does not work.  Name of the files are like:

less_box1_tau1_data.dat
less_box1_tau2_data.dat
less_box1_tau3_data.dat ...
less_box1_tau10_data.dat


so I run like:

for dir in DH*; do
  for file in `find $dir -type f -name less\*data.dat`; do
    [[ $file =~ tau\(1\|2\) ]] || for i in 1 2 3 4 5; do
      IFS=' ' read -a line;
      echo ${line[5]} ${line[6]} $(basename $file) >> $dir/list;
    done < $file;
  done;
done

But this command store all file names in 'list' without filtering and line[5], line[6] (columns in files are separated by comma)
--
To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups