[bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
westmen3
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 20 maja 2005, 23:01
Płeć: Mężczyzna
Środowisko graficzne: Blackbox

[bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Post autor: westmen3 »

Czesc
Chcialem napisac sobie skrypt do conky'iego, ale natrafilem na haczyk i nie wiem jak sobie poradzic(moja wiedza nt programowania jest znikoma)
Otoz

Kod: Zaznacz cały

grep -A 3 ''Teraz' ~/.scripts/temp | awk '{print}' > ~/.scripts/pogoda1
elegancko sciaga pogode do pliku, ale:
~/.scripts/pogoda1

Kod: Zaznacz cały

Teraz 13-19
                      Temp.:  4 °C [s1]
                      Ciśn.:  1000 hPa [s4] 
        [b12]         Wiatr:  [rw2]27 km/h [s2]
Pytanie nastepujace: jak pozbyc sie [s1] [s4] [rw2] [s2] [b12]
domyslam sie ze sa to ikony z pogoda.onet.pl ;D
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz)

Post autor: leon1313 »

Nie wiem, czy sam AWK obsługuje niechciwe dopasowania, PERL natomiast radzi sobie dosyć dobrze z tym tematem.
Trochę od zadniej strony, bo można to wszystko napisać w PERL-u, ale masz:

Kod: Zaznacz cały

grep -A 3 'Teraz' ~/.scripts/temp |perl -lane 's/\[.*?\]//gs;print' > ~/.scripts/pogoda1
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
westmen3
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 20 maja 2005, 23:01
Płeć: Mężczyzna
Środowisko graficzne: Blackbox

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz)

Post autor: westmen3 »

leon1313 pisze:Nie wiem, czy sam AWK obsługuje niechciwe dopasowania, PERL natomiast radzi sobie dosyć dobrze z tym tematem.
Trochę od zadniej strony, bo można to wszystko napisać w PERL-u, ale masz:

Kod: Zaznacz cały

grep -A 3 'Teraz' ~/.scripts/temp |perl -lane 's/\[.*?\]//gs;print' > ~/.scripts/pogoda1
Dziekuje za pomoc!
Zastanawiam sie jeszcze nad jedna rzecza jak poleceniem cut mozna wyciac fragment tekstu o "wspolrzednych" wiersz 2, kolumna 3-8. - byc moze to banalne, ale ja jakos nie potrafie tego zrobic :/
Pozdrawiam
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Post autor: leon1313 »

Można , ale lepiej do tego nadaje się AWK lub przy większych projektach PERL
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz)

Post autor: хur »

westmen3 pisze: [...] Zastanawiam sie jeszcze nad jedna rzecza jak poleceniem cut mozna wyciac fragment tekstu o "wspolrzednych" wiersz 2, kolumna 3-8. - byc moze to banalne, ale ja jakos nie potrafie tego zrobic :/ [...]
jeśli chodzi o cut to możliwe że nie zauważyłeś
że domyślnym delimiterem jest tabulacja a to co
chcesz ciąć ma spacje, ustawia się to opcją d.
Btw, wiem jak wyciąć cutem kolumny, ale wiersze to już nie...

Dam parę przykładów, żeby było widać jak co działa
to zrobię przykładową tabelkę którą będę ciął.
Dla wygody zapiszę ją do zmiennej 'tab'.
Wiersze oznaczę dużymi literami, kolumny zaś cyframi.
Tzn. tabelka 5 na 16 wygląda tak:

Kod: Zaznacz cały

echo "$tab"

Kod: Zaznacz cały

A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16
B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 B16
C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14 C15 C16
D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 D13 D14 D15 D16
E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 E13 E14 E15 E16
robię ją tak:

Kod: Zaznacz cały

export tab=$(eval seq\ -s\\\ \ -f{A..E}%02g\ 16\;)
przykłady:

Kod: Zaznacz cały

echo "$tab" | cut -d' ' -f3-8

A03 A04 A05 A06 A07 A08
B03 B04 B05 B06 B07 B08
C03 C04 C05 C06 C07 C08
D03 D04 D05 D06 D07 D08
E03 E04 E05 E06 E07 E08

Kod: Zaznacz cały

echo "$tab" | awk NR==2 | cut -d' ' -f3-8

B03 B04 B05 B06 B07 B08

Kod: Zaznacz cały

echo "$tab" | awk NR==2 | cut -d' ' -f3-8 --complement

B01 B02 B09 B10 B11 B12 B13 B14 B15 B16

Kod: Zaznacz cały

echo "$tab" | awk 'NR==2 { while(++i<=NF) printf"%*s",length($i)+1,(i>3&&i<9)?$i" ":""; printf "\n" } NR!=2'

A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16
            B04 B05 B06 B07 B08                                 
C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14 C15 C16
D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 D13 D14 D15 D16
E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 E13 E14 E15 E16

Kod: Zaznacz cały

echo "$tab" | awk 'NR==2 { while(++i<=NF) printf"%*s",length($i)+1,(i<4||i>8)?$i" ":""; printf "\n" } NR!=2'

A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16
B01 B02 B03                     B09 B10 B11 B12 B13 B14 B15 B16 
C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14 C15 C16
D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 D13 D14 D15 D16
E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 E13 E14 E15 E16
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Post autor: leon1313 »

xur, czy używanie jednocześnie cut-a i AWK jest poprawne politycznie ? :-)
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
westmen3
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 20 maja 2005, 23:01
Płeć: Mężczyzna
Środowisko graficzne: Blackbox

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Post autor: westmen3 »

Dziekuje za pomoc, dzieki niej udalo mi sie napisac skrypt pogodynki - z onetu.
Korzystajac z okazji mam jeszcze jeden problemik - bardziej estetyczny.
Otoz Obrazek
tak wyglada skrypt na chodzie juz w conky'm, jak widac nie jest on bardzo przejrzysty i tu nasuwa sie pytanie w jaki sposob mozna zwiekszyc odstep np temperatury od temperatury, albo ogolnie "kolumny" z jednymi danymi od "kolumny" z drugimi
tak wyglada czesc mojego kodu

Kod: Zaznacz cały

 echo 'Dzisiaj, godz.'	$z	$a
 echo 'Temperatura:'	$y 	$b
 echo 'Ciśnienie:'	$x	$c
 echo 'Wiatr:'		$p	$e
 echo 'Śnieg:'		$s	$f
 echo 'Deszcz:'		$d	$g
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [bash] Grep -A num (jak ominąć niechciany wyraz) / użycie CUT

Post autor: хur »

leon1313 pisze:xur, czy używanie jednocześnie cut-a i AWK jest poprawne politycznie ? :-)
to zależy, jeśli chodzi o shellowanie to jestem zwolennikiem anarchizmu epistemologicznego ;>

westmen3, niestety nie wiem co conky robi z białymi znakami,
nigdy tego programu na oczy nie widziałem.

jeśli ich nie "kolapsuje" to wystarczy
pobawić się cudzysłowami:

Kod: Zaznacz cały

echo "Dzisiaj, godz.	$z	$a"
echo "Temperatura:	$y 	$b"
# i tak dalej...
btw ja bym użył raczej czegoś co się nazywa "here document',
poniżej przykład:

Kod: Zaznacz cały

#!/bin/bash

# ustawiam zmiennym z a y b x c p e s f d g losowe wartości,
# tak żeby pokazać jak działa here document

for meta in z a y b x c p e s f d g ; do export ${meta}=$((RANDOM%10)) ; done

cat <<EOF
Dzisiaj, godz.	$z	$a
Temperatura:	$y	$b
Ciśnienie:	$x	$c
Wiatr:		$p	$e
Śnieg:		$s	$f
Deszcz:		$d	$g
EOF
btw z tabulacjami bym uważał. Jeśli conky nie będzie
honorował spacji / tabulacji to możesz wypróbować
spacje "niełamliwe". Podejrzewam też że conky
może mieć jakieś specjalne opcje do layoutu,
ale jak już pisałem nie miałem z nim styczności.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości