Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 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: Kłopot z awk i wyrażeniami regularnymi  (Przeczytany 8474 razy)

bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« dnia: 2005-05-27, 17:44:22 »
Witam
Potrzebuje narysowac tabelke tak zeby wyniki przezentowane byly wyrazniejsze i latwiejsze w uzyciu. Uzywam czegos takiego
ps - aux user | awk \\'{print \\"|   \\" $3 \\"  |\\" $4 \\"  |\\"}\\'
ale takie roziwazanie jest dobre gdyz tabelka sie przestawia w zaleznosci od ilosc znakow w lini i linia ktora ma oddzielac kolumny od siebie wariuje i nie wychodzi prosto bo przykladowo jak sa 3 znaki to jest ok ale jak sa juz 4 lub 2 znaki no to linia sie przesuwa :( jak to mozna napisac by bylo poprawnie. Z gory dziekuje za odpowiedz

kazikcz

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #1 dnia: 2005-05-27, 21:10:50 »
Hmm w sumie to możnaby to spróbować obejść troche prymitywną myślę metodą, a dokładniej chodzi mi o znak specjalny przesunięcia kursora do danej kolumny w wierszu:
echo -e 033[${numer_kolumny}Gjakis_tekst
np.
echo -e 033[40Gjakis_tekst

W przypadku awka usuwasz jednego backslasha czyli uzywasz 033[${numer_kolumney}G.


ps -aux | awk \\'{print \\"| \\" $3 \\"033[10G|033[15G\\" $4 \\" |\\"}\\'
Na bazie tego myślę że zdołasz zbudować sobie odpowiednią dla siebie tabelke ;)

Powodzenia! :)

bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #2 dnia: 2005-05-28, 01:14:07 »
dzieki wielkie sproboje pokombinowac w niedziel:)

bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #3 dnia: 2005-05-29, 23:03:52 »
Czy ktos moze mi pomoc i powiedziec co oznaczaja poszczegolny znaki uzyte w tym awk
 > ps -aux | awk \\'{print \\"| \\" $3 \\"033[10G|033[15G\\" $4 \\" |\\"}\\'
Chodzi mi dokladniej o  \\"033[10G|033[15G\\"  bo tego wogule nie kumam.Z gory dziekuje

xis

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #4 dnia: 2005-05-29, 23:19:23 »
2005-05-29 23:03:52 bryla napisał:

> Czy ktos moze mi pomoc i powiedziec co oznaczaja poszczegolny znaki uzyte w tym awk
 >  > ps -aux | awk \\'{print \\"| \\" $3 \\"033[10G|033[15G\\" $4 \\"
 > |\\"}\\'
 > Chodzi mi dokladniej o  \\"033[10G|033[15G\\"  bo tego wogule nie kumam.Z gory dziekuje

To są polecenia terminali VT100 (o ile się orientuję) i raczej ciężko (przynajmniej mi) w jednej linijce wyjaśnić znaczenie każdego znaku sterującego tutaj.

Poleciłbym Ci za to prostrze formatowanie wyjścia za pomocą instrukcji printf (w sumie to jest nawet bardziej eleganckie rozwiązanie).

ps aux | awk \\'{ printf \\"%-10s | %5sn\\", $1, $4 }\\'

printf przyjmuje za argument najpierw format ciągu (tu: %-10s | %5s, czyli string o długości conajmniej 10 znaków, kreska pionowa i później następny pięcioznakowy string), a następnie listę zmiennych (pierwsza i czwarta kolumna wyniku polecenia \\'ps aux\\').

Możesz zmieniać postać formatowania zgodnie z manualem awk (dział \\'printf\\').


bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #5 dnia: 2005-05-30, 13:14:56 »
2005-05-29 23:19:23 xis napisał:

> 2005-05-29 23:03:52 bryla napisał:
 >
 > > Czy ktos moze mi pomoc i powiedziec co oznaczaja poszczegolny znaki uzyte w tym awk
 >  >  > ps -aux | awk \\'{print \\"| \\" $3 \\"033[10G|033[15G\\" $4 \\"
 >  > |\\"}\\'
 >  > Chodzi mi dokladniej o  \\"033[10G|033[15G\\"  bo tego wogule nie kumam.Z gory
 > dziekuje
 >
 > To są polecenia terminali VT100 (o ile się orientuję) i raczej ciężko (przynajmniej mi) w
 > jednej linijce wyjaśnić znaczenie każdego znaku sterującego tutaj.
 >
 > Poleciłbym Ci za to prostrze formatowanie wyjścia za pomocą instrukcji printf (w sumie to jest
 > nawet bardziej eleganckie rozwiązanie).
 >
 > ps aux | awk \\'{ printf \\"%-10s | %5sn\\", $1, $4 }\\'
 >
 > printf przyjmuje za argument najpierw format ciągu (tu: %-10s | %5s, czyli string o długości
 > conajmniej 10 znaków, kreska pionowa i później następny pięcioznakowy string), a następnie
 > listę zmiennych (pierwsza i czwarta kolumna wyniku polecenia \\'ps aux\\').
 >
 > Możesz zmieniać postać formatowania zgodnie z manualem awk (dział \\'printf\\').
 >
 >
Eh wiesz co proboje i tak i na rozne inne sposoby, czytam manula proboje uzyc tej komendy co dales ps aux | awk \\'{ printf \\"%-10s | %5sn\\", $1, $4 }\\'  zeby  zrobilo mi tabelke dla wiecej niz dla dwoch zmiennych np dla 3 i pisze cos takiego
ps aux | awk \\'{ printf \\"%-10s | %5s\\"\\"| \\", $1, $4,  \\"%-10s | %5s\\",$5 }\\'
lub
ps aux | awk \\'{ printf \\"%-10s | %5s\\"\\" | \\" \\"%-10s | %5sn\\", $1, $4, $5 }\\'  
i zadna z tych propozycji nie wychodzi no lipa, pomoz jesli mozesz

bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #6 dnia: 2005-05-30, 14:34:08 »
znalazlem problem i juz mi prawie dziala ale jest maly problem bo pierwsza linie mi dobrze wyswietla natomiast cala reszte juz przesuwa o jeden znak cos w stylu
10 15 123
 12 23 123
 12 24 153
 13 12 234
a skladnia wyglada tak
ps -aux | awk \\'{printf \\"|  %-7d|  %-6s|  %-5s|  %-6s| %-40s|n \\", $2, $3, $4, $10, $11}\\'
dlaczego mi przesuwa gdzie jest blad

xis

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #7 dnia: 2005-05-30, 15:46:35 »
2005-05-30 14:34:08 bryla napisał:

> znalazlem problem i juz mi prawie dziala ale jest maly problem bo pierwsza linie mi dobrze
 > wyswietla natomiast cala reszte juz przesuwa o jeden znak cos w stylu
 > 10 15 123
 >  12 23 123
 >  12 24 153
 >  13 12 234
 > a skladnia wyglada tak
 > ps -aux | awk \\'{printf \\"|  %-7d|  %-6s|  %-5s|  %-6s| %-40s|n \\", $2, $3, $4, $10,
 > $11}\\'
 > dlaczego mi przesuwa gdzie jest blad
 >

Bo to formatowanie tak działa, że tylko dopełnia spacjami, gdy wyraz jest za krótki. Jeśli jednak jest za długi to komórka się rozjeżdża. Spróbuj z np. \\'%10.10s\\'. To oznacza \\'dokładnie 10 znaków\\' - jeśli wyraz będzie dłuższy, to zostanie przycięty.

bryla

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #8 dnia: 2005-05-30, 15:57:58 »
> Bo to formatowanie tak działa, że tylko dopełnia spacjami, gdy wyraz jest za krótki. Jeśli
 > jednak jest za długi to komórka się rozjeżdża. Spróbuj z np. \\'%10.10s\\'. To oznacza \\'dokładnie
 > 10 znaków\\' - jeśli wyraz będzie dłuższy, to zostanie przycięty.
 >
Niestety nie pomoglo. obcinac obcina do 10 znakow ale dalej jest problem moze narysuje jak to wyglada mniej wiecej spacje tutaj usuwa wiec zamiast spacji uzyje podkreslenia _
|__abc__|__12__|__23__|
_|__adc__|__15__|__43__|
_|__adc__|__15__|__43__|
_|__adc__|__15__|__43__|

no i wlasnie wali spacje od drugiej lini i tak do samego konca .

xis

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #9 dnia: 2005-05-30, 16:21:32 »
O to chodzi :)
No więc zaznajomię Cię z jeszcze jednym \\'magicznym\\' znakiem w formatowaniu.
Otóż \\'n\\' oznacza \\'przejdź do nowej linii. Printf wykonuje to polecenie, ale zauważ co robi później. Stawia spację! :)

Usuń spację między \\'n\\' a cudzysłowiem i powinno być ok :)

kabasz

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #10 dnia: 2005-05-27, 16:36:29 »
Powiem szczerze nie wiem gdzie popełniłam błąd w myśleniu jeśli ktoś byłby chętny i w sposób przejżysty mógłby mi coś wyjaśnić byłbym nie zmiernie wdzięczny

Zadanie wygląda tak
Trzeba znaleść pliki z katalogu /etc/,które zostały ostatnio zmodyfikowane w piątek 13

Polecenie które szuka nazwy plików to
find /etc/ -printf '%TD %TA %f n'

i teraz nie wiem jak napisać by szukało w dacie dnia 13 I żeby wybierał jeszcze Piątek to co udało mi się spłodzić to zaledwie taka komenda nie muszę chyba pisać że nie działa ;/
find /etc/ -printf '%TD %TA %f n' |awk -F / '/^[0-9]{2}[13][0-9]{2} Friday/'
Za wszelkie informacje będe nie zmiernie wdzięczny

xis

  • Gość
Kłopot z awk i wyrażeniami regularnymi
« Odpowiedź #11 dnia: 2005-05-29, 14:25:28 »
Myślę, że bardziej trzeba się skupić na manualu do polecenia find niż awk:

find /etc -printf '%Td %Tw %h/%fn' | egrep '^13 5' | awk '{ print $3 }'

Powinno działać.