Text aus Webseite mittels awk,sed etc. Tabelle umwandeln

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Text aus Webseite mittels awk,sed etc. Tabelle umwandel

Beitrag von tHoRax » 20.02.2017 22:20:06

@eggy

python lotto.py bzq. ./lotto.py liefern keine Ergebnisse bzw. Ausgabe. Habe es auch mit python lotto.py + & Zahlen bzw. ./lotto.py + 6 Zahlen eingegeben am Terminal, keine Ausgabe :cry: .
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Text aus Webseite mittels awk,sed etc. Tabelle umwandel

Beitrag von tobo » 22.02.2017 00:56:38

Dir ist klar, dass deine Beispiele in Ausgangs- und Zieldatei (mit Ausnahme des 2017er) nicht real sind? Egal, solange das Format von lotto.txt stimmt und sie sich im Home-Verzeichnis des angemeldeten Benutzers befindet, sollte funktionieren:

Code: Alles auswählen

#!/bin/bash

FILE="${HOME}/lotto.txt"
HITS=3

[ $# -gt 0 ] || exit 1
SEARCH="\<$1\>"
while [ $# -gt 1 ]; do
  SEARCH="${SEARCH}|\<$2\>"
  shift
done

nr=0
while read line; do
  nr=$((nr+1))
  searchline=$(sed 's/^\([[:digit:]]\{2\}\.\)\{2\}[[:digit:]]\{4\}[[:blank:]]\+//' <<< "$line")
  searchresult=$(grep -oE "$SEARCH" <<< "$searchline" | tr "\n" " ")
  count=$(wc -w <<< "$searchresult")
  [ "$count" -ge "$HITS" ] && echo "$nr $line Treffer: $searchresult"
done < "$FILE"

exit 0

tHoRax
Beiträge: 560
Registriert: 22.12.2014 17:23:26

Re: Text aus Webseite mittels awk,sed etc. Tabelle umwandel

Beitrag von tHoRax » 24.02.2017 19:08:13

hallo tobo.
Ich habe ja die Lottozahlen in der lotto.txt drinnen und die Datei hat das folgende Format:

Code: Alles auswählen

02.01.2016	1	23	30	35	43	47
09.01.2016	10	13	31	34	46	48
16.01.2016	9	21	23	31	34	39
23.01.2016	2	16	25	26	27	40
30.01.2016	18	23	33	34	40	48
06.02.2016	10	16	25	28	34	49
13.02.2016	18	20	30	32	43	45
20.02.2016	1	13	16	29	30	31
27.02.2016	7	10	15	25	37	49
05.03.2016	7	10	33	37	43	46
12.03.2016	20	26	30	39	47	49
19.03.2016	4	10	15	37	44	49
26.03.2016	1	3	31	33	40	41
02.04.2016	1	10	17	23	28	38
09.04.2016	1	4	38	39	46	47
16.04.2016	5	14	15	20	22	38
23.04.2016	8	15	16	17	27	35
30.04.2016	14	26	28	30	36	43
07.05.2016	16	32	34	37	42	44
14.05.2016	5	13	15	26	30	44
21.05.2016	2	5	29	46	47	48
28.05.2016	5	9	17	24	39	45
04.06.2016	5	6	22	31	35	42
11.06.2016	6	13	21	27	38	45
18.06.2016	2	8	12	17	19	27
25.06.2016	2	6	10	11	34	44
02.07.2016	4	6	8	15	26	30
09.07.2016	1	34	37	40	44	49
16.07.2016	1	18	22	30	34	44
23.07.2016	5	25	29	43	47	48
30.07.2016	6	13	23	26	30	33
06.08.2016	6	25	26	33	45	47
13.08.2016	6	14	28	30	37	39
20.08.2016	23	28	30	31	37	45
27.08.2016	1	8	22	32	33	43
03.09.2016	8	14	18	25	30	36
10.09.2016	1	3	6	11	24	43
17.09.2016	3	34	35	37	46	47
24.09.2016	4	15	18	21	32	45
01.10.2016	7	20	25	26	34	37
08.10.2016	14	21	32	33	35	48
15.10.2016	7	13	19	29	38	41
22.10.2016	2	21	26	32	36	48
29.10.2016	5	7	8	26	28	36
05.11.2016	9	32	35	38	42	43
12.11.2016	2	6	9	19	20	47
19.11.2016	1	2	6	15	38	39
26.11.2016	26	32	41	42	45	47
03.12.2016	5	16	39	43	47	48
10.12.2016	11	17	32	34	37	49
17.12.2016	6	24	28	29	34	35
24.12.2016	4	11	18	22	30	45
31.12.2016	27	29	37	42	45	47
07.01.2017	12	14	17	22	45	46
14.01.2017	3	4	23	27	28	37
21.01.2017	5	9	11	14	26	39
28.01.2017	6	9	15	38	41	42
04.02.2017	2	16	28	37	39	49
11.02.2017	3	12	22	32	45	46
Die Datei ist ja ellenlang :D Ich möchte bspw. 6 willkürlich von mir gewählte Lottozahlen im Terminal eingeben und das Script soll diese Zeile für Zeile in der Datei lotto.txt suchen und ab mindestens 3 Richtige aufw#rts + das zugehörige Datum der Zeile in der diese Zahlen stehen, ausgeben.
Zusätzlich könnte dieses Script noch die Zeilen durchnummerieren und in der Zieldatei es ausgeben.

Zu suchende Zahlenfolge soll z.B: sein(Eingabe):

Code: Alles auswählen

6   13    15    19     21    34
Diese soll in der Ausgangsdatei gesucht und ab 3 Treffer aufwärts die Treffer und das zugehörige Datum mit Zellennummerierung anzeigen, etwa so:

Code: Alles auswählen

4556   18.02.197ß     2    6    13   14   22  34    --> Treffer:3
5675   29.05.2000     6    10   13   15   16  21    --> Treffer:4
7766   13.06.2008     6    13    15  15    21  44   --> Treffer:5
Die Zahlen 4556, 5675 und 7766 sind die Zeilennummern.
Ich hoffe, dass das ein wenig verständlich ist.

Danke für deine Mühe.
/ASUS-F751S/ Intel Pentium N3710 @ 2.560Ghz
VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 35)
Linux/5.19.13-arch1-1 x86_64 GNU/Linux
WindowManager: BSPWM

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Text aus Webseite mittels awk,sed etc. Tabelle umwandel

Beitrag von tobo » 24.02.2017 19:24:21

Ich hatte das auch in etwa so verstanden. Teste doch einfach mal oben das Skript - die Parameter gibst du dem ausführbar gemachten Skript beim Aufruf mit:

Code: Alles auswählen

$ SCRIPT.sh 6 13 15 19 21 34

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Text aus Webseite mittels awk,sed etc. Tabelle umwandel

Beitrag von eggy » 24.02.2017 19:40:31

@tHoRax:
Mein Script ging davon aus, dass die Daten mit einem (nicht mehreren hintereinander) Leerzeichen getrennt sind. Wahrscheinlich hat es daher bei Dir nichts gefunden.

Code: Alles auswählen

#!/usr/bin/python3
import sys
import re
suchliste = []

i = 0
for zahl in sys.argv:
    if (i==0):
            pass
    else :
            suchliste.append (zahl)
    i+=1

f = open('lotto.txt','r')
for line in f.readlines():
        line = re.sub(" +", " ", line)
        treffer=0
        werte = line.split(' ')
        for zahl in suchliste:
                if (zahl in werte):
                        treffer += 1
        if (treffer > 2):
                print ("treffer:", treffer, " am" , werte[0], "in" , line)
f.close()

./lotto.py 6 13 15 19 21 34
gibt
treffer: 3 am 11.06.2016 in 11.06.2016 6 13 21 27 38 45

Antworten