awk und ganzes Wort mit match finden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 10.06.2011 10:50:09

Hallo Profis,

ich suche mit match()... einen String, allerdings will ich nur Ergebnisse bekommen, wenn der gefundene String ein vollstaendiges Wort ist.

wenn ich z.B. nach "Hans" suche, zeigt er auch "Hansmeiyer" an.

Danke euch!

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 10.06.2011 11:39:02

Entweder die Wortanfangs und -ende Ausdruecke verwenden. In gawk: \< und \>. Oder von Hand pruefen ob davor oder danach Whitespace ist (wenn man das als Definition der Ende eines Wortes annimmt). Zudem Zeilenanfang und -ende als Sonderfaelle beachten.
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 10.06.2011 13:21:27

Hallo Meillo,

anscheinend kennst du dich mit awk sehr gut aus.

Ich verwende momentan match($0, suche).
muss ich total auf match verzichten?

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 10.06.2011 14:36:54

rechenzentrum hat geschrieben:Ich verwende momentan match($0, suche).
muss ich total auf match verzichten?
Noe.

Fuer gawk:

Code: Alles auswählen

match($0, /\<foo\>/)
Sonst:

Code: Alles auswählen

match($0, /(^|[ \t])foo($|[ \t])/)
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 14.06.2011 02:54:01

Meillo hat geschrieben:
rechenzentrum hat geschrieben:Ich verwende momentan match($0, suche).
muss ich total auf match verzichten?
Noe.

Fuer gawk:

Code: Alles auswählen

match($0, /\<foo\>/)
Sonst:

Code: Alles auswählen

match($0, /(^|[ \t])foo($|[ \t])/)
Mensch, ist das kompliziert!!!!!
Ich versuche es aber mal.

Danke Dir!

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 14.06.2011 11:38:41

rechenzentrum hat geschrieben: Mensch, ist das kompliziert!!!!!
Ich glaube damit willst du sagen, dass du die Syntax ungewohnt findest. Ja, daran muss man sich gewoehnen.
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 14.06.2011 12:02:58

Danke!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 21.06.2011 11:44:26

Meillo hat geschrieben:
rechenzentrum hat geschrieben:Ich verwende momentan match($0, suche).
muss ich total auf match verzichten?
Noe.

Fuer gawk:

Code: Alles auswählen

match($0, /\<foo\>/)
Sonst:

Code: Alles auswählen

match($0, /(^|[ \t])foo($|[ \t])/)

Code: Alles auswählen

match($0, /\<foo\>/) foo 
was mache ich wenn eine Variable ist?

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 21.06.2011 11:48:59

rechenzentrum hat geschrieben:
Meillo hat geschrieben:
rechenzentrum hat geschrieben:Ich verwende momentan match($0, suche).
muss ich total auf match verzichten?
Noe.

Fuer gawk:

Code: Alles auswählen

match($0, /\<foo\>/)
Sonst:

Code: Alles auswählen

match($0, /(^|[ \t])foo($|[ \t])/)

Code: Alles auswählen

match($0, /\<foo\>/) foo 
was mache ich wenn eine Variable ist?
ich arbeite nicht mir einem awk script sondern uebergebe den code per commando zeile.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 21.06.2011 12:31:59

rechenzentrum hat geschrieben:

Code: Alles auswählen

match($0, /\<foo\>/) foo 
was mache ich wenn eine Variable ist?
Wenn was eine Variable ist? (Awk- oder Shell-Variable?)
rechenzentrum hat geschrieben: ich arbeite nicht mir einem awk script sondern uebergebe den code per commando zeile.
Das aendert grundsaetzlich mal nichts. Ob das Script in Single-Quotes oder in einer Datei liegt ist gleichbedeutend.


Poste bitte nochmal relevante Codeteile.
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 22.06.2011 08:05:48

Zur Zeit mache ich es so:

Code: Alles auswählen

 awk -v var="${i}" 'function match_is() { s=$0; \
match($0, var) ...
wenn ich nach "Hans" suche gibt er leider auch Ergebnisse zurück, wenn "Hansmeyer" in einer Zeile steht.
Ich will aber nur ein Ergebnis haben, wenn da "Hans".

was auch interessant zu wissen wäre ist, wie man, wenn eine Datei zuende gelesen wurde, wieder von vorn parsen(das hat den Zweck, dass beim Neuparsen gesammelte Informationen die meine Suche erweitert) kann.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 22.06.2011 10:06:51

rechenzentrum hat geschrieben:Zur Zeit mache ich es so:

Code: Alles auswählen

 awk -v var="${i}" 'function match_is() { s=$0; \
match($0, var) ...
wenn ich nach "Hans" suche gibt er leider auch Ergebnisse zurück, wenn "Hansmeyer" in einer Zeile steht.
Ich will aber nur ein Ergebnis haben, wenn da "Hans".
Wenn du einen gawk hast, dann kannst du es so machen:

Code: Alles auswählen

 awk -v var="\<${i}\>" 'function match_is() { s=$0; \
match($0, var) ...
Sonst musst du mal schauen welche Zeichen vor und hinter dem Namen kommen koennen. (Vielleicht ein Nicht-Wort-Zeichen oder Zeilenende/-anfang.)
was auch interessant zu wissen wäre ist, wie man, wenn eine Datei zuende gelesen wurde, wieder von vorn parsen(das hat den Zweck, dass beim Neuparsen gesammelte Informationen die meine Suche erweitert) kann.
Eine Shellschleife um den awk-Aufruf herum. (while : ; do awk ... ; done)
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 22.06.2011 11:02:09

Meillo hat geschrieben:
rechenzentrum hat geschrieben:Zur Zeit mache ich es so:

Code: Alles auswählen

 awk -v var="${i}" 'function match_is() { s=$0; \
match($0, var) ...
wenn ich nach "Hans" suche gibt er leider auch Ergebnisse zurück, wenn "Hansmeyer" in einer Zeile steht.
Ich will aber nur ein Ergebnis haben, wenn da "Hans".
Wenn du einen gawk hast, dann kannst du es so machen:

Code: Alles auswählen

 awk -v var="\<${i}\>" 'function match_is() { s=$0; \
match($0, var) ...
Sonst musst du mal schauen welche Zeichen vor und hinter dem Namen kommen koennen. (Vielleicht ein Nicht-Wort-Zeichen oder Zeilenende/-anfang.)
was auch interessant zu wissen wäre ist, wie man, wenn eine Datei zuende gelesen wurde, wieder von vorn parsen(das hat den Zweck, dass beim Neuparsen gesammelte Informationen die meine Suche erweitert) kann.
Eine Shellschleife um den awk-Aufruf herum. (while : ; do awk ... ; done)
leider habe ich kein gawk,
so weit ich weiss sind die scripte nicht kompartibel.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 23.06.2011 11:59:39

Meillo hat geschrieben:
rechenzentrum hat geschrieben: Eine Shellschleife um den awk-Aufruf herum. (while : ; do awk ... ; done)
ich nehme an, dass das eine bash schleife ist. ich möchte die Schleife in awk verwirklichen.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 23.06.2011 12:05:22

rechenzentrum hat geschrieben:
Meillo hat geschrieben:
rechenzentrum hat geschrieben: Eine Shellschleife um den awk-Aufruf herum. (while : ; do awk ... ; done)
ich nehme an, dass das eine bash schleife ist. ich möchte die Schleife in awk verwirklichen.
Warum?

Dieser Wunsch widerspricht dem Design von awk.
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 20.07.2011 10:40:50

ich bin jetzt auf gawk umgestiegen:

Code: Alles auswählen

awk -v var="\<${i}\>" 'function match_is() { s=$0; \
match($0, var) ...
funktioniert immer noch nicht.
es kommt eine Fehlermeldung: < wird als reines < intepretiert
> wird als reines > interpretiert

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk und ganzes Wort mit match finden

Beitrag von Meillo » 20.07.2011 20:22:20

rechenzentrum hat geschrieben:ich bin jetzt auf gawk umgestiegen:

Code: Alles auswählen

awk -v var="\<${i}\>" 'function match_is() { s=$0; \
match($0, var) ...
funktioniert immer noch nicht.
es kommt eine Fehlermeldung: < wird als reines < intepretiert
> wird als reines > interpretiert
So:

Code: Alles auswählen

gawk -v "var=\\\\<$i\\\\>" '....'
Use ed once in a while!

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: awk und ganzes Wort mit match finden

Beitrag von rechenzentrum » 21.07.2011 04:54:46

Meillo hat geschrieben:
rechenzentrum hat geschrieben: So:

Code: Alles auswählen

"var=\\\\<$i\\\\>"
damn! Was ist dass denn?
soetwas überkandideltes habe ich ja noch nie gesehen.

Antworten