Bash Script: google greppen und sortieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

Bash Script: google greppen und sortieren

Beitrag von cray » 16.08.2003 14:58:24

So ich will mir ein kleines Statistik Script bauen was aus Google die Anzahl der gefundenen Seiten greppt und dann sortiert:

Ein Bsp.

#!/bin/bash
lynx -source http://www.google.com/search?q=debian | grep 'of about' | sed "s/.*of about <b>//;s/<\/b>.*//" | tr -d ",."

Macht also folgendes sucht nach debian und greppt die Anzahl der gefundenen hits so jetzt will ich aber das ganze mit z.B.. mehreren Betriebsystemen machen das ganze soll variable sein! debian,openbsd,freebsd,netbsd,suse usw. so das ich oben ein paar mehr hinzufügen brauch :) und es muss sortiert werden! die meisten hits halt nach oben mit einer rang nr.!

letztendlich soll das ganze dann in etwa so aussehen:

01. RedHat 8,190,000 einträge
02. Solaris 7,310,000 einträge
03. FreeBSD 7,110,000 einträge
04. Suse 5,220,000 einträge
05. NetBSD 3,200,000 einträge
06 Mandrake2,460,000 einträge
07 AIX 2,250,000 Einträge
08 OpenBSD 1,590,000 einträge
09 IBM aix 656,000 einträge
10 hp ux 381,000 einträge
11 Debian 337,000 einträge
Zuletzt geändert von cray am 16.08.2003 17:46:56, insgesamt 1-mal geändert.
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 16.08.2003 17:26:19

So, hab mal was zusammengebastelt. Ob das Ganze wirklich funktioniert kann ich dir leider nicht sagen, da Google im Moment fast nur noch Timeouts hat.

Code: Alles auswählen

#!/bin/sh

for i in $*
do	
	zahl=`lynx -source http://www.google.com/search?q=$i | grep 'of about' | sed "s/.*of about <b>//;s/<\/b>.*//" | tr -d ",."`
	echo "$zahl $i" >> .tosort
done

cat .tosort | sort -nr | awk '{printf("%s %s\n", $2, $1);}' | nl
rm .tosort
Die gewünschten Begriffe einfach nacheinander als Parameter mit auf den Weg geben.

Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

funktioniert soweit

Beitrag von cray » 16.08.2003 17:44:40

mensch so ist das genau das was ich wollte :) allerdings fehlt mir noch etwas was mir jetzt auch erst aufgefallen :) wenn ich jetzt zb. bei google nach "suse linux" suchen will also nach exat den begriffen wie mach ich das :)? weil so würde er linux auch extra erkennen
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 16.08.2003 18:04:28

Wenn der Begriff aus 2 Wörtern oder auch mehr besteht einfach in " einschließen.

Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

hmm ok das geht auch so fast :)

Beitrag von cray » 16.08.2003 18:12:54

die ausgabe sieht so aus:

atmk:~/scripts# ./grepgoogle
1 mandarake 7100
2 redhat 7000000
3 freebsd 5560000
4 debian 346000
5 knoppix 341000
6 netbsd 2910000
7 openbsd 2140000
8 slackware 1200000
9 slackware 1200000
10 linux suse

allerdings sind da nen paar fehler wie du warscheinlich siehst :) mandrake steht mit 7100 ganz oben und linux suse steht unten ohne irgendwas :) und was danach kam fehlt das script sieht so aus:

Code: Alles auswählen

#!/bin/sh

for i in $*debian openbsd freebsd netbsd slackware "suse linux" slackware mandarake knoppix redhat
do
   zahl=`lynx -source http://www.google.com/search?q=$i | grep 'of about' | sed "s/.*of about <b>//;s/<\/b>.*//" | tr -d ",."`
   echo "$zahl $i" >> .tosort
done

cat .tosort | sort -r | awk '{printf("%s %s\n", $2, $1);}' | nl
rm .tosort
Zuletzt geändert von cray am 16.08.2003 18:19:04, insgesamt 1-mal geändert.
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 16.08.2003 18:17:55

in der 2. letzten Zeile fehlt auch der Parameter n bei sort. Wenn der dabei ist gehts. Verwende am besten die Version die jetzt da steht. Hatte noch was geändert.

Allerdings hab ich es gerade mit "Suse Linux" versucht.
Geht nicht. Ich schau mal was ich da noch machen kann, ansonsten schreib halt einfach Suse-Linux. ;)

edit: Das mit den Begriffen war eigentlich anderst gemeint. Die Begriffe nciht in das Script einfügen sondern auf der Kommandozeile mitgeben. Also

Code: Alles auswählen

$./grepgoogle.sh debian suse-linux freebsd

Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

hmm ok die version btw das mit n funktioniert

Beitrag von cray » 16.08.2003 23:14:48

schade das es nicht mit "suse linux" geht das ging in der 1. version zumind. so das er beides angezeigt hat :) in einer zeile jetzt trennt er das völlig also sucht für suse und linux hits ;)
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 17.08.2003 11:28:50

Code: Alles auswählen

#!/bin/sh

IFS=""

for i in $*
do   
   zahl=`lynx -source http://www.google.com/search?q=%22$i%22 | grep 'of about' | sed "s/.*of about <b>//;s/<\/b>.*//" | tr -d ",."`
   echo "$zahl $i" >> .tosort
done

cat .tosort | sort -nr | awk '{printf("%s %s %s Einträge\n", $2, $3, $1);}' | nl
rm .tosort
In der Version funktioniert es jetzt auch mit "Suse Linux". :) Ich hab auch noch einen Fehler in deiner ursprünglichen Zeile korrigiert, damit der Begriff auch wirklich als ein einzelner behandelt wird.

Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

Beitrag von cray » 17.08.2003 14:28:00

:-) danke nun geht alles nochwas wie bekommt man mit awk tabs? also ich würde das so haben wollen das nach dem der liste der systeme auch noch tabs kommen und dann erst die anzahl der hits
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 17.08.2003 19:47:06

Ganz einfach mit \t

Benutzeravatar
cray
Beiträge: 112
Registriert: 27.05.2002 01:39:01
Kontaktdaten:

ich habs jetzt auch als php code :)

Beitrag von cray » 17.08.2003 19:53:52

danke dir :) wenn ich mal wieder nen problem hab werd ich dich gleich fragen :) bist du auch im IRCnet? oder so

für alle die, die es auf einer php seite haben wollen:

Code: Alles auswählen

<?php

$systems=array('Debian',
        'FreeBSD',
        'RedHat',
        'Suse Linux',
        'Slackware',
        'NetBSD',
        'OpenBSD',
        'SCO Unix',
        'Knoppix',
        'Gentoo',
        'Mandrake');


foreach($systems as $os) {
        $anzahl=str_replace("\n", "", `lynx -source 'http://www.google.com/search?q=$os' | grep 'of about' | sed "s/.*of about <b>//;s/<\/b>.*//" | tr -d ",."`);
        $wert[].=$anzahl;
        $swert[$anzahl]=$os;
}

rsort($wert);

$i=1;
foreach($wert as $sortedwert) {
        echo "$i. $swert[$sortedwert]: $sortedwert results.<br>";
        $i++;
}
?>
[mailto: rt@debian.sh]
http://www.debian.sh

Value your freedom, or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn.

Richard Stallman

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Re: ich habs jetzt auch als php code :)

Beitrag von Chimerer » 18.08.2003 17:56:00

cray hat geschrieben:danke dir :) wenn ich mal wieder nen problem hab werd ich dich gleich fragen :)
Ok, gerne. :)
cray hat geschrieben: bist du auch im IRCnet? oder so
Leider nein, dank fehlender Flatrate. :cry:

Antworten