-
1. Data: 2009-05-21 19:05:07
Temat: AWK FS z ukośnikiem
Od: "slawek" <s...@h...pl>
Mam pola rozdzielone przez backslash z dopisanym cell. Czyli w C byłoby to
"\\cell".
Kładę w AWK prosto jak tylko można BEGIN {FS = "\\cell"} i to nie działa.
(Dwa backslashe)
Natomiast daję BEGIN {FS = "\\\\cell"} i jest ok - choć nie rozumiem
dlaczego. (Cztery backslashe)
Pierwszy backslash powinien kazać interpretować drugi "literalnie". Czyli
powinny wystarczać dwa - a muszę cztery.
Jak się uprzeć, to FS=".cell" też działa (choć wolę nie, bo jeszcze zatnie
się na np. "excellence".
Czy ktoś wie co się dzieje (gawk)?
slawek
-
2. Data: 2009-05-21 19:18:20
Temat: Re: AWK FS z ukośnikiem
Od: somebody <a...@d...com>
slawek pisze:
> Mam pola rozdzielone przez backslash z dopisanym cell. Czyli w C byłoby
> to "\\cell".
>
> Kładę w AWK prosto jak tylko można BEGIN {FS = "\\cell"} i to nie
> działa. (Dwa backslashe)
>
> Natomiast daję BEGIN {FS = "\\\\cell"} i jest ok - choć nie rozumiem
> dlaczego. (Cztery backslashe)
>
> Pierwszy backslash powinien kazać interpretować drugi "literalnie".
> Czyli powinny wystarczać dwa - a muszę cztery.
Jeśli chcesz zapisać jeden slash, to piszesz \\. Po to, żeby znak po
jednym slashu nie był interpretowany jako specjalny.
Gdybyś chciał zapisać ciąg abc\abc\abc w języku programowania, to
potrzebujesz abc\\abc\\abc. A teraz usuń abc -> \\ (dwa slashe widzialne
dla użytkownika) przechodzą na \\\\.
To teraz pomyśl, jak wesoło jest, kiedy trzeba generować kod dla regexp
w c++ np. w pythonie.
pozdrawiam,
-
3. Data: 2009-05-21 21:28:32
Temat: Re: AWK FS z ukośnikiem
Od: "slawek" <s...@h...pl>
Użytkownik "somebody" <a...@d...com> napisał w wiadomości grup
dyskusyjnych:1OhRl.61218$0...@n...ams2...
> Jeśli chcesz zapisać jeden slash, to piszesz \\. Po to, żeby znak po
> jednym slashu nie był interpretowany jako specjalny.
A ty w ogóle to awk znasz? Bo widzę że nie teges...
Właśnie napisałem 2x slash aby było że jest to jeden znak ukośnika
wstecznego.
Tyle że gawk ma tak jakby potem to jeszcze raz gdzieś pchał i interpretował
i dopiero 4x robi mu dobrze. I to jest dziwne, bo według podręcznika to
powinno wystarczać 2x.
Ot i wsio.
slawek
-
4. Data: 2009-05-22 07:09:37
Temat: Re: AWK FS z ukośnikiem
Od: "Stachu 'Dozzie' K." <d...@d...im.pwr.wroc.pl.nospam>
On 21.05.2009, slawek wrote:
>
>
> Użytkownik "somebody" <a...@d...com> napisał w wiadomości grup
> dyskusyjnych:1OhRl.61218$0...@n...ams2...
>> Jeśli chcesz zapisać jeden slash, to piszesz \\. Po to, żeby znak po
>> jednym slashu nie był interpretowany jako specjalny.
>
> A ty w ogóle to awk znasz? Bo widzę że nie teges...
>
> Właśnie napisałem 2x slash aby było że jest to jeden znak ukośnika
> wstecznego.
>
> Tyle że gawk ma tak jakby potem to jeszcze raz gdzieś pchał i interpretował
> i dopiero 4x robi mu dobrze. I to jest dziwne, bo według podręcznika to
> powinno wystarczać 2x.
A ty w ogóle awk znasz? Bo widzę że nie teges... Którą zmienną ty
modyfikujesz i co ona ma zawierać?
--
Stanislaw Klekot
-
5. Data: 2009-05-22 07:59:32
Temat: Re: AWK FS z ukośnikiem
Od: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>
On 21 Maj, 21:05, "slawek" <s...@h...pl> wrote:
> Natomiast daję BEGIN {FS = "\\\\cell"} i jest ok - choć nie rozumiem
> dlaczego. (Cztery backslashe)
Bo jeden poziom interpretacji jest między źródłem programu a wartością
stringa, a drugi -- między wartością stringa a jego znaczeniem jako
wyrażenie regularne.
-
6. Data: 2009-05-22 10:28:25
Temat: Re: AWK FS z ukośnikiem
Od: "slawek" <h...@s...pl>
Użytkownik "Stachu 'Dozzie' K." <d...@d...im.pwr.wroc.pl.nospam>
napisał w wiadomości grup
dyskusyjnych:s...@d...im.pwr.wr
oc.pl...
> A ty w ogóle awk znasz? Bo widzę że nie teges... Którą zmienną ty
> modyfikujesz i co ona ma zawierać?
Field Separator, czyli FS który jest zastrzeżoną zmienną dla awk. Pola mam
rozdzielone przez "\\cell" (czyli jeden ukośnik i słowo cell). Na zdrowy
rozum jeżeli FS zawiera separator pola, to powinno być FS="\\cell" . A
tymczasem gawk chce mieć FS="\\\\cell" . Czyli jest jeden poziom
interpretacji więcej.
No cóż, albo `Dozzie` znasz awk (lepiej niż ja) - albo nie masz pojęcia o
czym piszesz. Opis FS znajdziesz w podręczniku awk .
slawek
-
7. Data: 2009-05-22 10:32:21
Temat: Re: AWK FS z ukośnikiem
Od: "slawek" <h...@s...pl>
Użytkownik "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl> napisał w
wiadomości grup
dyskusyjnych:2f3ec1d3-fbdd-48af-9ed2-611e709bcd2b@q1
6g2000yqg.googlegroups.com...
> Bo jeden poziom interpretacji jest między źródłem programu a wartością
> stringa, a drugi -- między wartością stringa a jego znaczeniem jako
> wyrażenie regularne.
Czyli tak jak się domyślałem. Czyli jest dobrze.
Dziękuję
slawek
-
8. Data: 2009-05-22 10:32:42
Temat: Re: AWK FS z ukośnikiem
Od: "Stachu 'Dozzie' K." <d...@d...im.pwr.wroc.pl.nospam>
On 22.05.2009, slawek wrote:
>
> Użytkownik "Stachu 'Dozzie' K." <d...@d...im.pwr.wroc.pl.nospam>
> napisał w wiadomości grup
> dyskusyjnych:s...@d...im.pwr.wr
oc.pl...
>> A ty w ogóle awk znasz? Bo widzę że nie teges... Którą zmienną ty
>> modyfikujesz i co ona ma zawierać?
>
> Field Separator, czyli FS który jest zastrzeżoną zmienną dla awk. Pola mam
> rozdzielone przez "\\cell" (czyli jeden ukośnik i słowo cell). Na zdrowy
> rozum jeżeli FS zawiera separator pola, to powinno być FS="\\cell" .
Na zdrowy rozum jeżeli FS zawiera *regexp*, to znaki backslasha trzeba
wycytować.
> A
> tymczasem gawk chce mieć FS="\\\\cell" . Czyli jest jeden poziom
> interpretacji więcej.
>
> No cóż, albo `Dozzie` znasz awk (lepiej niż ja) - albo nie masz pojęcia o
> czym piszesz.
A teraz zgadnij, chłopcze, która to możliwość. Podpowiedź (a raczej
pełną odpowiedź) Qrczak ci już dał w tym wątku.
--
Stanislaw Klekot
-
9. Data: 2009-05-22 10:34:27
Temat: Re: AWK FS z ukośnikiem
Od: Mariusz Kruk <M...@e...eu.org>
epsilon$ while read LINE; do echo \>"$LINE"; done < "slawek"
>Field Separator, czyli FS który jest zastrzeżoną zmienną dla awk. Pola mam
>rozdzielone przez "\\cell" (czyli jeden ukośnik i słowo cell). Na zdrowy
>rozum jeżeli FS zawiera separator pola, to powinno być FS="\\cell" .
Źle myślisz. Napis 'FS="\\cell"' przypisze do FS ciąg zaczynający się
znakiem specjalnym "\c" (co zostanie zinterpretowane literalnie jako 'c'
po prostu).
--
[------------------------] Bilety należy kasować przed zejściem(ZTM
[ K...@e...eu.org ] Warszawa)
[ http://epsilon.eu.org/ ]
[------------------------]
-
10. Data: 2009-05-22 10:43:22
Temat: Re: AWK FS z ukośnikiem
Od: "Stachu 'Dozzie' K." <d...@d...im.pwr.wroc.pl.nospam>
On 22.05.2009, Mariusz Kruk wrote:
> epsilon$ while read LINE; do echo \>"$LINE"; done < "slawek"
>>Field Separator, czyli FS który jest zastrzeżoną zmienną dla awk. Pola mam
>>rozdzielone przez "\\cell" (czyli jeden ukośnik i słowo cell). Na zdrowy
>>rozum jeżeli FS zawiera separator pola, to powinno być FS="\\cell" .
>
> Źle myślisz. Napis 'FS="\\cell"' przypisze do FS ciąg zaczynający się
> znakiem specjalnym "\c" (co zostanie zinterpretowane literalnie jako 'c'
> po prostu).
Nie do końca. W FS wyląduje ciąg `\cell', czyli taki jak oczekuje
użytkownik. Tylko że jako regexp będzie szukać znaku specjalnego \c,
czyli po prostu "c".
--
Stanislaw Klekot