Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Bash Wörter zählen

  1. #1
    movco
    Gast

    Bash Wörter zählen

    Hallo ich muss aus einem Input die Wörter zählen und die > laut input ausgeben. Jetzt habe ich den Input zb.: (http://www.gutenberg.org/files/27761/27761-8.txt)

    ./wf 10 < hamlet
    1522 the
    922 of
    900 to
    887 and
    691 a
    687 i
    534 you
    526 in
    480 footnote
    400 my

    Ich habe mal eine kleine Abfrage gemacht:
    tr -s '\n' ' ' | tr -s ' ' '\n' | grep -i -w -c the;
    Bekomme aber nur 1475 für the raus. Kann mir wer bitte helfen, müsste das Dienstag haben. Wo liegt der Fehler der Abfrage, oder gehe ich es falsch an?

    LG

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    deine lösung ignoriert solche fälle:


    "...line ends.The house...."

    ich würds spontan so machen:

    perl -npe 's/[^a-zA-Z]/\n/g' | grep -iwc the

    problem ist aber, dass

    "the-
    orem"

    (wenn man so trennen würde...)

    auch als the erkannt wird, klar theorem trennt man nicht so
    aber du siehst worauf ich raus will

    wenn du alle the finden willlst, also auch als teil in einem wort
    kannst du das benutzen:

    perl -e 'while(<>) { $c++ while s/the//i; } print "$c\n";'
    Geändert von msi (21-03-2010 um 22:15 Uhr)

  3. #3
    movco
    Gast
    Danke mal, aber da kommt das auch nicht wirklich raus ...
    Aber andere haben das schon gelöst (geben nur die Lösung nicht her)

    Als Hinweis war noch gegeben:
    Hinweis: tr, sort, uniq und sed könnten hilfreich sein

    LG

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    schau mal was
    Code:
    uniq -c
    ,
    Code:
    sort -rn
    und
    Code:
    sed 's/\([A-Z\)/\L\1/g'
    machen.

    HTH jeebee
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    Zitat Zitat von movco Beitrag anzeigen
    Danke mal, aber da kommt das auch nicht wirklich raus ...
    Aber andere haben das schon gelöst (geben nur die Lösung nicht her)

    Als Hinweis war noch gegeben:
    Hinweis: tr, sort, uniq und sed könnten hilfreich sein

    LG
    wie ich dir vorher bereits geschrieben habe, gibts halt noch ein paar spezialfälle, das ist dann an dir die noch einzugrenzen.
    evtl ist auch die musterlösung falsch, weil die in ihrem skript "the_" aus zB

    _Enter the_ KING _and_ QUEEN, _preceded by_ POLONIUS, HAMLET,
    LAERTES,[23] Lords, Ladies, _and_ Attendants.
    nicht mitzählen, das musst du dir halt überlegen.

  6. #6
    movco
    Gast
    Ok danke erstmal. Hab es jetzt geschafft und es passt. Nur habe ich jetzt eine Frage, ich möchte ja die Zeilenausgabe mit dem input beschränken.
    $ARG=$1
    und möchte es so ausgeben:
    sed -ne '1,$ARG p';
    das klappt aber nicht, wie kann ich die Variable hier richtig übergeben?

    Bzgl. den Befehl:
    sed 's/\([A-Z]\)/\L\1/g'
    das wandelt alle Buchstaben in kleinbuchstaben, richtig?
    Aber wie genau? Was machen die runden klammern? Und \L\1?

    LG

  7. #7
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    1:
    Code:
    ARG=$1
    sed -ne "1,$ARG p"
    2:
    die runden Klammern bilden eine Gruppe, d.h. man kann das was innerhalb der Klammern gematcht wurde, später mit \1 wiederverwenden. das \L konvertiert das nächste Element (hier die Referenz zum gematchten Grossbuchstaben) zu Kleinbuchstaben.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  8. #8
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Gab es nicht so was wie wc (word count)? Also als alleinstehendes Kommando?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  9. #9
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    ja, aber wc kann laut manpage nicht die verschiedenen Wörter zählen (also 1720 the, 1050 a, ...) sondern nur die Anzahl Wörter, Zeilen oder Zeichen in einem Dokument.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  10. #10
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ah - ich hatte irgendwie nur den ersten Satz gelesen

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •