Nowe posty

xx Problem ze sterownikami. (5)
Wczoraj o 21:25:16
xx Instalacja xfce4 (2)
Wczoraj o 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: awk - sortowanie kolumn z roznymi danymi  (Przeczytany 4927 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: 3056
  • 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: 3056
  • 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: 3056
  • 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