Nowe posty

Autor Wątek: Pomoc z pętlą for.  (Przeczytany 4361 razy)

gacek758

  • Gość
Pomoc z pętlą for.
« dnia: 2014-04-10, 20:56:03 »
Witam. Do pracy magisterskiej musze analizowac dane z sekwencjonowania dna do czego potrzebuje napisac prosty skrypt z pętlą for. Napisalem go ale z jakiegos powodu nie dziala. Myśle że wprawne oko bardziej doświadczonych użytkowników na pewno od razu wychwyci błąd.

Skrypt bez pętli wygląda tak :

#!/bin/bash
w_dir=~/temp
cd $w_dir
~/bin/mstatspop/bin/mstatspop_linux -f fasta -i Rr_05_multi.fasta -o 0 -t 10000 -N 4 6 6 4 6 -G 0 -p 2 -u 1 > output.txt

według mnie z pętlą for powinien wyglądać tak :

#!/bin/bash
w_dir=~/temp
cd $w_dir
~/bin/mstatspop/bin/mstatspop_linux
for file in Rr_*.fasta
   do
   -f fasta -i $file -o 0 -t 10000 -N 4 6 6 4 6 -G 0 -p 2 -u 1 > output.txt
done

w skrypcie chodzi o to by brał z folderu plik zaczynający się na Rr_ z rozszerzeniem .fasta i dla każdego po wykonywał polecenia [(-f fasta -i $file -o 0 -t 10000 -N 4 6 6 4 6 -G 0 -p 2 -u 1) są to polecenie dla programu mstatspop.] i wszystko wrzucił do jednego pliku output.txt

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3069
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Pomoc z pętlą for.
« Odpowiedź #1 dnia: 2014-04-10, 21:48:59 »
A dlaczego program uruchamiasz przed petlą? Program powinieneś odpalić w pętli w formie jak w pierwszym przykładzie, tylko z nazwą pliku wejściowego zmienioną na zmienną, jak w drugim przykładzie.

I zamiast >output.txt daj >>output.txt , bo pierwsza forma będzie nadpisywała wyniki poprzedniej iteracji.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

gacek758

  • Gość
Pomoc z pętlą for.
« Odpowiedź #2 dnia: 2014-04-10, 22:50:01 »
Cytat: pkraszewski
A dlaczego program uruchamiasz przed petlą? Program powinieneś odpalić w pętli w formie jak w pierwszym przykładzie, tylko z nazwą pliku wejściowego zmienioną na zmienną, jak w drugim przykładzie.

I zamiast >output.txt daj >>output.txt , bo pierwsza forma będzie nadpisywała wyniki poprzedniej iteracji.
`A dlaczego program uruchamiasz przed petlą?`, więc rozumiem że ~/bin/mstatspop/bin/mstatspop_linux = uruchomienie programu

jak mam odpalic program w petli tak jak w pierwszym przykladzie skoro w pierwszym przykladzie nie ma pętli? nie rozumiem. Pan pewnie odpiwedział sensowenie tylko dla mnie zbyt niejasno, jestem totalnie początkujący.

alvaro

  • Gość
Pomoc z pętlą for.
« Odpowiedź #3 dnia: 2014-04-11, 01:23:15 »
Cytat: gacek758
jak mam odpalic program w petli tak jak w pierwszym przykladzie skoro w pierwszym przykladzie nie ma pętli? nie rozumiem. Pan pewnie odpiwedział sensowenie tylko dla mnie zbyt niejasno, jestem totalnie początkujący.
Coś w tym stylu:
#!/usr/bin/env bash

w_dir=~/temp
output=output.txt

cd "$w_dir"
echo -n > "$output"
for file in Rr_*.fasta ; do
  ~/bin/mstatspop/bin/mstatspop_linux -f fasta -i "$file" -o 0 -t 10000 -N 4 6 6 4 6 -G 0 -p 2 -u 1 >> "$output"
done
wklejka

Pozwoliłem sobie dodać kod odpowiedzialny za czyszczenie pliku przy każdym uruchomieniu skryptu:
echo -n > "$output"

gacek758

  • Gość
Pomoc z pętlą for.
« Odpowiedź #4 dnia: 2014-04-11, 09:16:43 »
Wielkie dzięki. Skrypt działa, a metodą prób i błędów dowiedziałem się co robi echo -n > "$output" oraz co spowoduje zmiana > na >>. dzięki jeszcze raz :)