Bash Script: google greppen und sortieren
Bash Script: google greppen und sortieren
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
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
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
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.
Die gewünschten Begriffe einfach nacheinander als Parameter mit auf den Weg geben.
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
[ jabber ] chimerer@amessage.de
funktioniert soweit
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
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
Wenn der Begriff aus 2 Wörtern oder auch mehr besteht einfach in " einschließen.
[ jabber ] chimerer@amessage.de
hmm ok das geht auch so fast :)
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:
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
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
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
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
[ jabber ] chimerer@amessage.de
hmm ok die version btw das mit n funktioniert
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
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
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
[ jabber ] chimerer@amessage.de
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
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
ich habs jetzt auch als php code :)
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:
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
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
Re: ich habs jetzt auch als php code :)
Ok, gerne.cray hat geschrieben:danke dir wenn ich mal wieder nen problem hab werd ich dich gleich fragen
Leider nein, dank fehlender Flatrate.cray hat geschrieben: bist du auch im IRCnet? oder so
[ jabber ] chimerer@amessage.de