To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
Unixy.pl
Internetowe forum na temat systemów GNU/Linux Unix

Programowanie - BASH -skrypt pomoc

Toudi - 2011-07-04, 12:27
Temat postu: BASH -skrypt pomoc
witam

potrzebuje sprytnego polecenia badz skrypciku ktory poustawia mi dane
mam plik z danymi np:

....
A
B
B
B
...
A
B
B
....

i potrzebuje miec
A B
A B
A B
...
A B
A B
itd

czyli jezeli w pliku pojawi sie A to ma pokazywac A B az do momentu napotkania nastepnego A itd (B zawsze pojawia sie po A)

dzieki za pomoc

Maciek_Rutecki - 2011-07-04, 16:06

Do końca nie rozumiem co chcesz zrobić, ale:
1. Musisz czytać plik linia po linii:
http://en.kioskea.net/faq...le-line-by-line
2. gdy w linii n-tej jest A to wyświetl/przekieruj do pliku A B
http://www.faqs.org/docs/...WTO.html#ss11.2

Toudi napisał/a:
czyli jezeli w pliku pojawi sie A to ma pokazywac A B az do momentu napotkania nastepnego A itd (B zawsze pojawia sie po A)


1. A jak się nie pojawi to co?
2. A jak się w koncu pojawi następne "A" to co?

Musisz najpierw sam określić czego oczekujesz. Wróżka ma wakacje.


Reszta należy do Ciebie (sesja?).

Toudi - 2011-07-04, 16:30

to jeszcze raz
mam plik z danymi, ktore poprzedzone sa stalym identyfikatorem

A ; dane1
B ; dane
B ; dane
A ; dane2
B ; dane

i takich schenatow jest duz0, wynikiem ma byc

A ; dane1 ; B ; dane
A ; dane1 ; B ; dane
A ; dane2 ; B ; dane

"dane" oczywiscie sa rozne chodzi o zasade ze jak jest A i po nim B to pisz A B az spotkasz nasteny A, jak spotkasz nastepne A to pisz nowe A (napotkane) i B po nim wystepujace a jak po B nie ma A tzn koniec pliku, zakoncz

jezeli wystapi A to rowniez wystapi B

dzieki za link juz dzwoni ale jeszcze nie wiem dokladnie gdzie :)

tak sesja

Maciek_Rutecki - 2011-07-05, 21:59

Prawie gotowe:

in.txt:
Kod:
A ; dane1
B ; dane
B ; dane
A ; dane2
B ; dane
EOF


skrypt script.sh:
Kod:
#!/bin/bash

echo enter input file name
read fname

echo enter output file name
read outname

rm -fr $outname

exec<$fname

while read line
do
  case "$line" in
    A*)
      begin_string="$line"
      continue
      ;;
    *)
      begin_string="$begin_string"
      second_string="$line"
      echo "$begin_string ; $second_string" >> $outname
      ;;
  esac
 
done


Wynik działania skryptu:
Kod:
maciek@gumis:~/Desktop$ ./script.sh
enter input file name
in.txt
enter output file name
out.txt
maciek@gumis:~/Desktop$


plik wyjściowy:
Kod:
A ; dane1 ; B ; dane
A ; dane1 ; B ; dane
A ; dane2 ; B ; dane


A co należy do Ciebie jako praca domowa:
1. skrypt olewa ostatnią linikę pliku wejściowego (stąd EOF)
2. Czy aby na pewno działa zawsze?
3. Co jeśli pierwsza linijka nie zawiera A?
4. Co jeśli gdzieś jest pusta linia?



Powered by phpBB modified by Przemo © 2003 phpBB Group