Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 272
  • Last Modified:

bash script for managing database

Hi folks,

I have two questions here:

(First question) basically I have a bunch of files
1.txt 2.txt 3.txt ... 100.txt and each of them is some results of
calculation done with a parameter "N".

1.txt is done with N=0.99, 2.txt is done with N=0.97, 3.txt is done
with N=0.9 4.txt is done with N=0.89...
As you can see, the filenames are named according to the sort of
parameter N.  The relation is recorded in a file called ./summary:

1    0.99
2    0.97
3    0.9
4    0.89
...
...

Now I am generating a file with N=0.98 in the very same folder.  I
want to rename all the files such that the filename still represents
the order of N, besides, I also want to update ./summary so the new N--
filename relation is updated.

(Namely, I want the new ./summary file to be
1   0.99
2   0.98
3   0.97
4   0.9
5   0.89)

(Second question)
In some other folders I have 1.gif 2.gif 3.gif .... x.gif (x differs from case to case),
and I am about to generate yet another
gif file.  The newly generated gif file is always named "new.gif"

This time I simply want bash to find the biggest number "x" of the
files, and rename my new.gif to $((x+1)).gif.
What shall I do?
0
mystea2008
Asked:
mystea2008
  • 3
1 Solution
 
zmoCommented:
file add_new_N.sh (see code snippet below)

and now you just call 'bash add_new_N.sh'

about the second question :

for f in `dir *.gif`; do N=`cut -d'.' -f1`; done
echo $N.gif

#!/bin/bash
 
N=$1
 
echo "rm -f summary.txt"
 
for f in `dir *.txt | sed s/summary.txt//`; do 
    F=`cat $f | grep 'N=' | sed 's/N=//'`; 
    S=`echo $f | cut -d'.' -f1`
    if [ $(echo "$F > $N" | bc) -eq 0 ]; then 
        echo mv $f  $(($(echo $f | cut -d'.' -f1)+1)).txt;
        echo "echo '$(($S+1)) $F' >> summary.txt"
    elif [ $(echo "$F == $N" | bc) -eq 0 ]; then
        echo mv $f  $(($S+1)).txt;
        echo "echo '$(($S+1)) $F' >> summary.txt"
        echo "echo 'N=$N' > $f";
        echo "echo '$S $N' >> summary.txt"
    fi; 
    echo "tac summary.txt > summary.txt"
done

Open in new window

0
 
zmoCommented:
of course, you have to remove all the 'echo' from the beginning of the commands statements, remove surrounding "" quotes and change '' inner quotes to ""

ie:
#!/bin/bash
 
N=$1
 
rm -f summary.txt
 
for f in `dir *.txt | sed s/summary.txt//`; do 
    F=`cat $f | grep 'N=' | sed 's/N=//'`; 
    S=`echo $f | cut -d'.' -f1`
    if [ $(echo "$F > $N" | bc) -eq 0 ]; then 
        mv $f  $(($(echo $f | cut -d'.' -f1)+1)).txt;
        echo "$(($S+1)) $F" >> summary.txt
    elif [ $(echo "$F == $N" | bc) -eq 0 ]; then
        mv $f  $(($S+1)).txt;
        echo "$(($S+1)) $F" >> summary.txt
        echo "N=$N" > $f;
        echo "$S $N" >> summary.txt
    fi; 
    echo "tac summary.txt > summary.txt"
done

Open in new window

0
 
zmoCommented:
et voila :)
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now