Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-01-19 10:58:28

  patrykxes - Użytkownik

patrykxes
Użytkownik
Zarejestrowany: 2009-01-19

bash skrypt - polaczenie dwoch plikow Trudne

Napsalem skrypt, ktory generuje taki raport "users.csv":

@admin;;
user1;yes;
user2;yes;
user3;yes;
@develop;;
user4;no;
user5;yes;
user6;no;
user7;no;
@progs;;
user8;no;
user9;no;
...

Kolejny skrypt tworzy taki oto raport "groups.csv"

@admin;path1;12;
user9;path10;1;
@admin;path2;12;
@develop;path3;12;
@develop;path4;1;
@progs;path5;1;
@progs;path6;1;
@progs;path7;1;
@progs;path8;1;
...

Chce polaczyc te oba powyzsze "users.csv" "groups.csv" wyniki i uzyskac taki oto raport koncowy "result.csv"

@admin;path1;12;;;
@admin;path2;12;;;
user1;@admin;yes;12;
user2;@admin;yes;12;
user3;@admin;yes;12;
@develop;path3;12;;;
@develop;path4;1;;;
user4;@develop;no;12 1;
user5;@develop;yes;12 1;
user6;@develop;no;12 1;
user7;@develop;no;12 1;
@progs;path5;1;;;
@progs;path6;1;;;
@progs;path7;1;;;
@progs;path8;1;;;
user8;@progs;no;1;
user9;@progs;no;1;
...

Niestety tylko i wylacznie w bash.
Dzieki.

Offline

 

#2  2009-01-19 11:00:11

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: bash skrypt - polaczenie dwoch plikow Trudne

Użyj polecenia cat.

Offline

 

#3  2009-01-19 11:02:48

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: bash skrypt - polaczenie dwoch plikow Trudne

Trudne

Trywialne.

Wystarczy cat i przekierowanie. By potem posortować jak w podanym przykładzie użyj sort. (Dopisek: wróć, od razu można posortować, bez cata)

Nie chcę dzielić włosa na czworo, ale przypadkiem w pliku csv (Coma Separated Values), wartości nie powinny być oddzielone przecinkami, a nie średnikami? ;)

Ostatnio edytowany przez azhag (2009-01-19 11:07:58)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#4  2009-01-19 12:05:19

  patrykxes - Użytkownik

patrykxes
Użytkownik
Zarejestrowany: 2009-01-19

Re: bash skrypt - polaczenie dwoch plikow Trudne

cat ? hmmm...
jakos nie wyobrazam sobie polaczenia tych dwoch wynikow cat'em... zapomnialem dodac, ze plik pierwszy jak i rowniez drugi bedzie ulegal zmianie (beda dodawane, usowane grupy oraz uzytkownicy).

Offline

 

#5  2009-01-19 12:35:07

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: bash skrypt - polaczenie dwoch plikow Trudne

To będziesz musiał używać cat po każdej operacji zmiany. Chyba lepiej byłoby użyć w taki razie bazy danych zamiast csv.

Offline

 

#6  2009-01-19 12:42:20

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash skrypt - polaczenie dwoch plikow Trudne

ok, chyba tylko ja zauwazylem ze chesz laczyc takze pola i to inteligentnie ... czyli:
* w users.csv podmienic kazde okreslenie grupy typu "@admin;;" na wszystkie rekordy opisujace ta grupe z result.csv
* nastepnie w polach dotyczacych clonkow tej grupy dodac informacje o tej grupie ...

pytanie tylko jak rozumiesz "wylacznie w bash" ... bo jezeli chialbys sie ograniczyc tylko do polecen wbudowanych to bedzie ciezko ... jezeli dopuszczasz komendy takie jak awk, sed (w systemach POSIXowych sa standardem) to problemu nie ma ... ja bym to robil w oparciu o awk


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2009-01-19 12:42:36

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: bash skrypt - polaczenie dwoch plikow Trudne

patrykxes napisał(-a):

jakos nie wyobrazam sobie polaczenia tych dwoch wynikow cat'em

cat plik1 plik2 > plik3

Teraz jednak przyjrzałem się temu co masz i co chcesz osiągnąć, i faktycznie — zadanie jest nieco bardziej skomplikowane niż się wydaje na pierwszy rzut oka.

Kod:

#!/bin/bash

: > /tmp/wynik

for GROUP in $(awk -F';' '/^@/ {print $1}' groups.csv | uniq | sort); do
    grep $GROUP groups.csv >> /tmp/wynik
    echo user >> /tmp/wynik
done

ja zrobiłem do połowy, przeróbka users.csv to zadanie dla awka, którego nie znam dostatecznie


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#8  2009-01-19 13:30:41

  patrykxes - Użytkownik

patrykxes
Użytkownik
Zarejestrowany: 2009-01-19

Re: bash skrypt - polaczenie dwoch plikow Trudne

Czesc

bercik napisał(-a):

ok, chyba tylko ja zauwazylem ze chesz laczyc takze pola i to inteligentnie ... czyli:
* w users.csv podmienic kazde okreslenie grupy typu "@admin;;" na wszystkie rekordy opisujace ta grupe z result.csv
* nastepnie w polach dotyczacych clonkow tej grupy dodac informacje o tej grupie ...

pytanie tylko jak rozumiesz "wylacznie w bash" ... bo jezeli chialbys sie ograniczyc tylko do polecen wbudowanych to bedzie ciezko ... jezeli dopuszczasz komendy takie jak awk, sed (w systemach POSIXowych sa standardem) to problemu nie ma ... ja bym to robil w oparciu o awk

Tak, jak najbardziej awk, sed (chodzi mi o bash z uzyciem wlasnie awk,sed,itp...)

azhag napisał(-a):

Teraz jednak przyjrzałem się temu co masz i co chcesz osiągnąć, i faktycznie — zadanie jest nieco bardziej skomplikowane niż się wydaje na pierwszy rzut oka.

Kod:

#!/bin/bash

: > /tmp/wynik

for GROUP in $(awk -F';' '/^@/ {print $1}' groups.csv | uniq | sort); do
    grep $GROUP groups.csv >> /tmp/wynik
    echo user >> /tmp/wynik
done

Dzieki, hmm... wlasnie sie zastanawiam jak tego dokonac, niestety nie jestem zaawansowanym programista :(

Offline

 

#9  2009-01-19 16:55:27

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash skrypt - polaczenie dwoch plikow Trudne

bedzie to mniej wiecej cos takiego:

Kod:

awk -F";" '
    /^@/{
        GRUPA=$1;
        NUM="";
        system("grep " GRUPA " groups.csv > wynik");
        while(getline <"wynik") {
            print $0;
            NUM=NUM " " $3;
        }
        close("wynik");
        next
    }
    {
        printf("%s;%s;%s;%s;\n", $1, GRUPA, $2, NUM)
    }
' users.csv

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#10  2009-01-20 13:49:22

  patrykxes - Użytkownik

patrykxes
Użytkownik
Zarejestrowany: 2009-01-19

Re: bash skrypt - polaczenie dwoch plikow Trudne

bercik napisał(-a):

bedzie to cos takiego:

Kod:

awk -F";" '
    /^@/{
        GRUPA=$1;
        NUM="";
        system("grep " GRUPA " groups.csv > wynik");
        while(getline <"wynik") {
            print $0;
            NUM=NUM " " $3;
        }
        close("wynik");
        next
    }
    {
        printf("%s;%s;%s;%s;\n", $1, GRUPA, $2, NUM)
    }
' users.csv

Wielkie Dzieki :) dziala :)
Bardzo dziekuje :)
Pozdrawiam

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)