awk erkennen ob noch ein anderes wort vor ein Wort steht.

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 erkennen ob noch ein anderes wort vor ein Wort steht.

Beitrag von rechenzentrum » 10.06.2011 09:29:19

wie kann ich mit awk ermitteln ob vor Wort0 noch ein Wort steht?

z.B.:

Code: Alles auswählen

                           wort0

Code: Alles auswählen

       kein wort0

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von Meillo » 10.06.2011 09:31:37

rechenzentrum hat geschrieben:wie kann ich mit awk ermitteln ob vor Wort0 noch ein Wort steht?

Code: Alles auswählen

$1 == "wort0" { print "kein Wort davor" }
Use ed once in a while!

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von rechenzentrum » 10.06.2011 10:16:23

Hallo Meilo,

danke für deine Antwort.
was ist wenn der String "kein Wort davor wort0" lautet?

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von Meillo » 10.06.2011 11:36:37

rechenzentrum hat geschrieben:Hallo Meilo,
Doppel-L!

was ist wenn der String "kein Wort davor wort0" lautet?
Dann steht vor ``wort0'' ein Wort.

Vielleicht solltest du die Anforderungen nochmal genauer formulieren.

Ich habe sie so verstanden, dass du wissen willst ob ``wort0'' das erste Wort auf der Zeile ist.


... ahh, ich glaube jetzt verstehe ich: Du willst wissen ob auf einer Zeile ``Wort'' vor ``wort0'' steht. Es waere weniger verwirrend gewesen wenn du sowas wie ``foo'' und ``bar'' verwendet haettest oder die Worte als literal (z.B. durch Anfuehrungszeichen) gekennzeichnet haettest.

Muss es denn awk sein?

Ein trivialer Ansatz waere:

Code: Alles auswählen

sed '/Wort.*wort0/d'
Man muesste dabei vielleicht noch Wortgrenzen beachten.

In awk:

Code: Alles auswählen

awk '
/wort0/ {
    sub(/wort0/,"")
    if (/Wort/) {
        print "kein Wort"
    }
}
'
Erneut ohne Wortgrenzen. (In gawk: \< und \>)

Oder du loopst rueckwaerts ueber die Felder und setzst Flags:

Code: Alles auswählen

awk '
/wort0/ {
    sub(/wort0.*/, "")
    for (i=NF; i>0; i--) {
        if ($i=="Wort") {
            print "kein Wort"
        }
    }
}
'
Use ed once in a while!

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von rechenzentrum » 10.06.2011 13:13:58

man ist das kompliziert!
Ich habe von awk komplet keine Ahnung und mein IQ ist auch nicht gerade hoch.

Ich brauch eigentlich nur zu wissen ob substring im Hauptstring das erste Wort ist.
Ich versuche deinen Ansatz nachzuvollziehen.

Danke Dir.

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von Meillo » 10.06.2011 14:39:08

rechenzentrum hat geschrieben:man ist das kompliziert!
So kompliziert ist's auch wieder nicht. ;-)
Ich habe von awk komplet keine Ahnung [...]
Toll, dass du trotzdem damit arbeitest. Awk ist naemlich coooool. 8)

Ich brauch eigentlich nur zu wissen ob substring im Hauptstring das erste Wort ist.
Das habe ich leider noch immer nicht verstanden. :-(

Mach mal ein paar Beispiele.
Use ed once in a while!

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

Re: awk erkennen ob noch ein anderes wort vor ein Wort steht

Beitrag von rechenzentrum » 14.06.2011 02:52:09

Meillo hat geschrieben:
rechenzentrum hat geschrieben:man ist das kompliziert!
So kompliziert ist's auch wieder nicht. ;-)
Ich habe von awk komplet keine Ahnung [...]
Toll, dass du trotzdem damit arbeitest. Awk ist naemlich coooool. 8)

Ich brauch eigentlich nur zu wissen ob substring im Hauptstring das erste Wort ist.
Das habe ich leider noch immer nicht verstanden. :-(

Mach mal ein paar Beispiele.
Das awk cool ist merke ich auch so langsam, daher möchte ich es ja lernen.

Beipsiel ein:
IsWortVorString("aaaaaaaaa bb", "bb") ---- true
IsWortVorString(" bb", "bb") ---- false
IsWortVorString(" ..... :: bb", "bb") ---- false
8)

Antworten