Nowe posty

Autor Wątek: awk - sortowanie kolumn z roznymi danymi  (Przeczytany 4721 razy)

toudi1983

  • Gość
awk - sortowanie kolumn z roznymi danymi
« dnia: 2013-07-31, 11:57:56 »
witam

potrzebuje sprytne zapytanie ktore posortuje mi plik po 1 kolumnie a wartosc z 2 kolumny wyswietli obok siebie
tzn
np. jest plik test.txt, jako separator mamy #

cat test.txt
20100731#dane1
20100731#dane2
20100731#dane3
20100730#dane1
20100730#dane2
20100730#dane4
20100729#dane1
20100729#dane3

a jako wynik oczekujemy

20100731#dane1,dane2, dane3  
20100730#dane1,dane2, dane4  
20100729#dane1,dane3

ma ktos jakis pomysl jak to zarzezbic?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2839
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #1 dnia: 2013-07-31, 14:00:38 »
Tablica tablic asocjacyjnych.
Pierwszy poziom to daty, drugi to dane a trzeci cokolwiek (wtedy tablice danych zachowują się jak sety, nie ma powtórzeń).

#!/usr/bin/awk -f

BEGIN {
 # Pola oddzielone #ami
 FS="#"

 # Sortowanie w for'ach
 PROCINFO["sorted_in"] = "@ind_str_asc"
}

{
        # Pompowanie danych do tablicy tablic
        DANE[$1][$2]=1
}

END {
        # Wywalenie wszystkiego na ekran
        for(DATA in DANE) {
                # Dla kolejnej daty
                LISTA=""
                for(EL in DANE[DATA]) {
                        # doklej poczczegolne dane do listy
                        LISTA=LISTA "," EL
                }
                # Wyswietl, ucinajac poczatkowy przecinek z LISTA
                print DATA "#" substr(LISTA,2)
        }
}
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

toudi1983

  • Gość
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #2 dnia: 2013-07-31, 14:57:31 »
witam

cos nie chce dzialac Twoj skrypcik ale troche mnie nakierowal

dzieki

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2839
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #3 dnia: 2013-07-31, 15:21:29 »
Cytat: toudi1983
witam

cos nie chce dzialac Twoj skrypcik ale troche mnie nakierowal

dzieki
cat test.txt

20100731#dane1
20100731#dane2
20100731#dane3
20100730#dane1
20100730#dane2
20100730#dane4
20100729#dane1
20100729#dane3

 ./test.awk < test.txt

20100729#dane1,dane3
20100730#dane1,dane2,dane4
20100731#dane1,dane2,dane3
:/ Z dokładnością do kolejności linii w górę a nie w dół.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

toudi1983

  • Gość
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #4 dnia: 2013-08-01, 09:49:18 »
wywala bledem ze zly zapis    DANE[$1][$2]=1
o co kaman?

toudi1983

  • Gość
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #5 dnia: 2013-08-01, 14:10:05 »
ten zapis tez wywala bledem  EL in DANE[DATA])  
jakis pomysl

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #6 dnia: 2013-08-02, 01:37:19 »
Pod jakim systemem to uruchamiasz, i jakim edytorem to edytujesz? Jeżeli używasz notatnika albo jakiegoś innego windowsowego wynalazku, to upewnij się, że zapisuje Ci tekst w czystym ASCII z uniksowym końcem linii, bez żadnych dodatkowych niezbędnych featuresów.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2839
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
awk - sortowanie kolumn z roznymi danymi
« Odpowiedź #7 dnia: 2013-08-02, 08:54:00 »
U mnie jest
awk -V

GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.2, GNU MP 5.1.2)
Copyright (C) 1989, 1991-2013 Free Software Foundation.
System to Gentoo ~amd64.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy