jens4ever
Goto Top

GREP mit größer als benutzen

Moin zusammen,

ich habe eine Liste mit Uhrzeiten. (Liste unten)

Mit
cat /skripte/mobilitaet/hvv/6/plan.txt | grep -A 3 $(date +%H:) > /skripte/mobilitaet/hvv/6/abfahrten1.txt
ziehe ich mir alle Busfahrten raus, die der aktuellen Stunde entsprechen + 3 die danach kommen. Könnt ihr mir helfen noch zu filtern, dass ich genau die Fahrten habe, die nach der aktuellen Minuten kommen? Also sowas wie grep "greater than" $(date +%H:%M)?

Ansonsten könnte vielleicht man auch direkt filtern mit "greater than" $(date +%H:%M) und dann head 5, sodass die nächsten 5 Busfahrten angezeigt werden.
Hat jemand nen Tipp?

Vielen Dank vorab.
Jens

00:04
00:09
00:24
00:29
00:49
01:09
04:25
04:45
04:49
05:05
05:09
05:15
05:25
05:29
05:35
05:45
05:49
05:55
05:56
06:05
06:06
06:16
06:16
06:26
06:26
06:31
06:36
06:36
06:41
06:46
06:46
06:51
06:56
06:56
07:01
07:06
07:06
07:11
07:16
07:16
07:21
07:26
07:26
07:31
07:34
07:36
07:40
07:41
07:43
07:46
07:49
07:50
07:53
07:56
07:56
08:00
08:01
08:03
08:06
08:06
08:11
08:11
08:14
08:16
08:17
08:20
08:21
08:24
08:25
08:27
08:29
08:31
08:34
08:35
08:37
08:40
08:41
08:44
08:45
08:47
08:51
08:52
08:54
08:57
09:00
09:01
09:04
09:07
09:07
09:11
09:14
09:15
09:17
09:21
09:22
09:24
09:27
09:30
09:32
09:37
09:37
09:42
09:45
09:47
09:52
09:52
09:57
10:00
10:02
10:07
10:09
10:15
10:17
10:22
10:24
10:30
10:32
10:37
10:39
10:45
10:47
10:52
10:54
11:00
11:02
11:07
11:09
11:15
11:17
11:22
11:24
11:30
11:32
11:37
11:39
11:45
11:47
11:52
11:54
12:00
12:02
12:07
12:09
12:15
12:17
12:22
12:24
12:30
12:32
12:37
12:39
12:45
12:47
12:52
12:54
12:59
13:00
13:04
13:07
13:09
13:14
13:15
13:19
13:22
13:24
13:29
13:30
13:34
13:37
13:39
13:45
13:47
13:52
13:54
14:00
14:02
14:07
14:09
14:15
14:17
14:20
14:24
14:25
14:30
14:32
14:35
14:39
14:40
14:45
14:48
14:50
14:55
14:55
14:59
15:03
15:04
15:09
15:10
15:14
15:18
15:18
15:21
15:24
15:25
15:28
15:31
15:33
15:34
15:38
15:40
15:41
15:44
15:48
15:48
15:51
15:53
15:54
15:58
15:58
16:01
16:03
16:04
16:08
16:08
16:11
16:13
16:14
16:18
16:18
16:21
16:23
16:24
16:28
16:28
16:31
16:33
16:34
16:38
16:38
16:41
16:43
16:44
16:48
16:48
16:51
16:53
16:54
16:58
16:58
17:01
17:03
17:04
17:08
17:08
17:11
17:13
17:14
17:18
17:18
17:21
17:23
17:24
17:28
17:28
17:31
17:33
17:34
17:38
17:38
17:41
17:43
17:44
17:48
17:48
17:51
17:53
17:54
17:58
17:58
18:01
18:03
18:04
18:08
18:08
18:11
18:13
18:14
18:18
18:18
18:21
18:23
18:24
18:28
18:28
18:31
18:33
18:34
18:38
18:38
18:41
18:43
18:44
18:48
18:48
18:51
18:54
18:55
18:58
19:01
19:03
19:04
19:08
19:10
19:11
19:14
19:18
19:18
19:21
19:24
19:25
19:28
19:31
19:33
19:34
19:38
19:40
19:41
19:44
19:46
19:47
19:51
19:53
19:54
19:57
20:00
20:01
20:03
20:07
20:08
20:10
20:13
20:15
20:17
20:20
20:23
20:25
20:27
20:30
20:33
20:35
20:38
20:43
20:45
20:48
20:53
20:55
20:58
21:03
21:05
21:08
21:13
21:15
21:18
21:23
21:25
21:28
21:35
21:38
21:45
21:48
21:55
21:58
22:05
22:08
22:14
22:19
22:24
22:29
22:34
22:39
22:44
22:49
22:54
22:59
23:04
23:09
23:19
23:24
23:29
23:44
23:49

Content-ID: 297259

Url: https://administrator.de/forum/grep-mit-groesser-als-benutzen-297259.html

Ausgedruckt am: 22.12.2024 um 13:12 Uhr

colinardo
Lösung colinardo 25.02.2016 aktualisiert um 19:21:57 Uhr
Goto Top
Hallo Jens,
ich würde das besser mit awk machen und die Zeit korrekt umwandeln und vergleichen:
awk -F':' '{if(mktime(strftime("%Y %m %d "$1" "$2" 00")) > systime()){cnt+=1; if(cnt > 0 && cnt <= 5){print $0}}}' /skripte/mobilitaet/hvv/6/plan.txt  
oder auch so wenn man die Anzahl der Zeilen nicht mit AWK festlegen will sondern mit head.
awk -F':' '{if(mktime(strftime("%Y %m %d "$1" "$2" 00")) > systime()){print $0}}' /skripte/mobilitaet/hvv/6/plan.txt | head -n 5  

Grüße Uwe

p.s die Zeitenliste kürzt du besser hier im Thread, es kann sich ja jeder denken wie sich die Liste fortsetzt. Dann braucht man nicht so weit scrollen. face-wink
Jens4ever
Jens4ever 25.02.2016 um 19:23:14 Uhr
Goto Top
Uwe... wie immer vielen Dank.

Ich wünsche dir ein schönes Wochenende!
Jens

PS: Der Hinweis mit der Länge des Beispiels ist notiert und verstanden. face-smile
Biber
Biber 26.02.2016 um 09:15:30 Uhr
Goto Top
[OT]
Zitat von @Jens4ever:

PS: Der Hinweis mit der Länge des Beispiels ist notiert und verstanden. face-smile
Hmmm...
Wie äußert sich bei dir dieses Verstanden-Haben? *brilleputz* *nochmalBeitragNachmess*

Schönes Wochenende
Biber
[/OT]
Jens4ever
Jens4ever 26.02.2016 um 11:18:06 Uhr
Goto Top
Äußert sich so: "Deine Aktualisierung im Text ist zu umfangreich (76.87% Änderungen). Da es schon Kommentare auf deinen Inhalt gibt, solltest du nur noch einzelnen Absätze oder Wörter korrigieren. Wenn das nicht ausreicht, melde dich bei einem Moderator."

;)

Aber beim nächsten Mal face-smile
Jens4ever
Jens4ever 26.02.2016 aktualisiert um 11:27:35 Uhr
Goto Top
Moin Uwe,

ich versuche zusätzlich das mit PHP auszugeben. Geht aber nicht. Seite wird nicht dargestellt

Mein Versuch sieht so aus:
<?php
 $output = exec('awk -F':' '{if(mktime(strftime("%Y %m %d "$1" "$2" 00")) > systime()){cnt+=1; if(cnt > 0 && cnt <= 5){print $0}}}' /skripte/mobilitaet/hvv/6/plan.txt);  

echo "$output";  
?>

Hast du oder jemand anders mit Ahnung nen Tipp, was das falsch ist?
Danke vorab und ein schönes Wochenende.

Jens
colinardo
colinardo 26.02.2016 aktualisiert um 12:52:52 Uhr
Goto Top
Zitat von @Jens4ever:
ich versuche zusätzlich das mit PHP auszugeben. Geht aber nicht. Seite wird nicht dargestellt
Arghhh du würfelst da aber heftig die verschiedenen Anführungszeichen durcheinander ... so wird das nichts face-wink Solche Konstrukte packt man besser in ein Skript und führt es dann aus.
Wenn du es unbedingt so machen willst:
exec("awk -F ':' '{if(mktime(strftime(\"%Y %m %d \"$1\" \"$2\" 00\")) > systime()){cnt+=1; if(cnt > 0 && cnt <= 5){print $0}}}' /skripte/mobilitaet/hvv/6/plan.txt",$output);  
echo join("<br>",$output);  

Das ist aber eine ineffektive Herangehensweise. Mach das besser direkt mit PHP das ist viel zielstrebiger als hier ein unsicheres Shell-Skript für eine solche Aufgaben zu bemühen face-smile
colinardo
colinardo 26.02.2016 aktualisiert um 12:41:14 Uhr
Goto Top
Mach es direkt mit PHP...ist cleaner und spart einen potentiell unsicheren exec
// Datei in Array laden
$arrTimes = file('/skripte/mobilitaet/hvv/6/plan.txt');  
// Callback-Function zum filtern des Arrays
function filterTimes($t){return (strtotime($t) > time());}
// Array filtern, auf 5 Einträge begrenzen und Elemente durch einen Zeilenumbruch verbinden
$result = join("<br>",array_slice(array_filter($arrTimes,"filterTimes"),0,5));  
// Ausgabe
echo $result;
Ausreichende Zugfriffsrechte des Web-Daemons auf den Pfad muss natürlich gegeben sein.

Ebenso schönes Wochenende
Grüße Uwe