Carek Napisano Marzec 1, 2009 Zgłoszenie Share Napisano Marzec 1, 2009 (edytowane) Czesc. Z gory wielkei dzieki chociazby za chec pomocy, czy przeczytanie mojego postu. Wiec sprawa ma sie tak... mam do napisania maly prosty program. Program juz jest, z tymze dziala u mnie a na kompie, na ktorym powinien (czyt. na uczelni) nie bardzo polecenie jest proste: Dane są następujące pliki postaci: 0_1.txt. 1_1.txt, 2_1.txt, 3_1.txt, 0_2.txt, 1_2.txt, ... 3_8.txt,.. . Każdy z tych plików ma następującą postać: 3 stałe etykiety (nazwy), 3 bloki danych, napis koniec i pod nim ewentualne dane informacyjne (nieistotne dla zadania). Przykładowy plik: Nazwa1 0.1 Dana1 Nazwa2 0.1 Dana n21 0.1 Dana n22 0.1 Dana n23 Nazwa3 0.1 Dana n31 0.1 Dana n32 0.1 Dana n33 Koniec Ewa Olejarz Więcej przykładowych plików znajduje się tutaj. Napisz skrypt, który łączy pliki o tym samym numerze za znakiem _ w jeden plik (czyli np. 0_1.txt. 1_1.txt, 2_1.txt, 3_1.txt w plik out_1.txt), w którym poszczególne bloki danych w obrębie każdej etykiety (nazwy)oraz pomija koniec i tekst, który się za nim znajduje. Czyli dla plików wspomnianych powyżej out_1.txt powinien mieć postać: Nazwa1 0.1 Dana1 1.1 Dana1 2.1 Dana1 3.1 Dana1 Nazwa2 0.1 Dana n21 0.1 Dana n22 0.1 Dana n23 1.1 Dana n21 1.1 Dana n22 1.1 Dana n23 2.1 Dana n21 2.1 Dana n22 3.1 Dana n21 3.1 Dana n22 Nazwa3 0.1 Dana n31 0.1 Dana n32 0.1 Dana n33 1.1 Dana n31 1.1 Dana n32 2.1 Dana n31 2.1 Dana n32 2.1 Dana n33 3.1 Dana n31 3.1 Dana n32 a oto kod: BEGIN{ while (("/bin/ls | grep .txt | awk /^[0-9]+_[0-9]+.txt/" | getline linia)>0) tab[linia]=1 for(i in tab){ out = "out" substr(i,index(i,"_")) if ((getline x < i) > 0) tab2[out] = x } while(length(tab)>0){ for(i in tab){ out = "out" substr(i,index(i,"_")) if(tab2[out] != 0){ print tab2[out] >> out delete tab2[out] } while((getline tmp < i) > 0){ if (tmp ~ /Koniec/){ delete tab[i] break } if (tmp ~ /Nazwa/){ tab3[out] = tmp break } print tmp >> out } } for(i in tab3) tab2[i]=tab3[i] } } bledy jakie wyskakuja: awk: syntax error near line 2 awk: illegal statement near line 2 awk: syntax error near line 6 awk: illegal statement near line 6 awk: syntax error near line 15 awk: illegal statement near line 15 awk: syntax error near line 30 awk: bailing out near line 30 kombinowalem ze to mzoe przez roznice wersji awk u mnie i na serwerze, jednak nie wiem dlaczego ale te bledy dotycza wszystkich wierszy gdize jest getline a to raczej standardowe polecenie... pls help! Edytowane Marzec 1, 2009 przez WalDo Proszę korzystać ze znaczników [code][/code] (przywklejkach do 5 linii) oraz [codebox][/codebox] (przy dłuższych) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Marzec 1, 2009 Zgłoszenie Share Napisano Marzec 1, 2009 Są jakieś błędy, bo przy przeczytaniu 1. pliku (umieściłem w nim zawartość drugiego codboksa z Twojego postu) zaczyna w wiecznej pętli wpisywać "Nazwa3" do out_1.txt, ale problemów z syntaksem nie ma. Problem musisz raczej sam rozwiązać. Nikt z nas nie wie jaki masz system na uczelni, jaką wersję awk, w jaki sposób uruchamiasz skrypt itd. Chociaż z drugiej strony to chyba każdy awk rozpoznaje słowo kluczowe getline Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się