Datei Zeilen und Spalten mit Shell-Skript auslesen.
Ich brauche Hilfe beim Erstellen eines Shell-Skripts zum auslesen einer Datei.
Hallo ich soll ein Shellskript schreiben welches eine Log-Datei ausliest.
Die Datei hat folgenden Inhalt:
Ich möchte jetzt, dass das Skript die Zeiten zwischen den OUT und IN eines Users herausfindet.
Gibt es dazu eine Möglichkeit?
Hoffe ihr könnt mir helfen hab nicht so viel Wissen, was Shellskripte angeht.
Hallo ich soll ein Shellskript schreiben welches eine Log-Datei ausliest.
Die Datei hat folgenden Inhalt:
17:52:20 OUT: user1@srv1
17:53:41 IN: user1@srv1
17:55:32 OUT user2@srv2
17:56:22 OUT user3@srv1
17:56:56 OUT user1@srv1
18:00:43 IN user3@srv1
18:05:09 IN user1@srv1
18:35:46 IN user2@srv2
Ich möchte jetzt, dass das Skript die Zeiten zwischen den OUT und IN eines Users herausfindet.
Gibt es dazu eine Möglichkeit?
Hoffe ihr könnt mir helfen hab nicht so viel Wissen, was Shellskripte angeht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121135
Url: https://administrator.de/forum/datei-zeilen-und-spalten-mit-shell-skript-auslesen-121135.html
Ausgedruckt am: 11.04.2025 um 14:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo @rique1me,
wenn der Doppelpunkt hinter den Ersten out und in nur versehentlich dasteht, dann könnte es so gehen.
wenn die Loginzeit über Mitternacht geht wird trotzdem richtig berechnet.
wenn der User sich noch nicht abgemeldet hat könnte man das vllt auch noch einbauen.
die Zeit muss im Batch so umgerechnet werden sonst meckert win bei 08 und 09.
ist getestetet und läuft
Gruß Phil
wenn der Doppelpunkt hinter den Ersten out und in nur versehentlich dasteht, dann könnte es so gehen.
wenn die Loginzeit über Mitternacht geht wird trotzdem richtig berechnet.
wenn der User sich noch nicht abgemeldet hat könnte man das vllt auch noch einbauen.
die Zeit muss im Batch so umgerechnet werden sonst meckert win bei 08 und 09.
ist getestetet und läuft
@echo off
for /f "useback tokens=1-3" %%i in ("inouttime.txt") do set "time=%%i" & call :rechne %%j "%%k"
pause & goto :eof
:rechne
if %time:~ 6, 1% lss 1 (set sec1=%time:~ -1%) else set sec1=%time:~ 6%
if %time:~ 3, 1% lss 1 (set sec2=%time:~ 4, 1%) else set sec2=%time:~ 3, 2%
if %time:~ 0, 1% lss 1 (set sec3=%time:~ 1, 1%) else set sec3=%time:~ 0, 2%
set /a timei = sec1 + sec2 * 60 + sec3 * 1440
if /i %1 == out (goto :out ) else goto :in
:out
if not defined ..%~2 set ..%~2=%timei% & goto :eof
:in
if defined ..%~2 (goto :umsetz ) else goto :eof
:umsetz
for /f "tokens=1,2 delims==" %%i in ('set ..') do if "%%i"=="..%~2" (if %timei% gtr %%j (set /a timeo = 86400 + %%j - timei ) else set /a timeo = %%j - timei )
echo %~2 ist %timeo% sekunden angemeldet
set ..%~2=
Gruß Phil
BASH? -Du meintest sicher Batch.
dann setzt Du für die Doppelpunkete einfach hinter die Abfrage in Zeile 09 hinter das erste out die Doppelpunkte.
Beim umrechenen vom Zeitformat soll das wieder zurückgerechnet [HH:MM:SS] werden oder
Geht das mit den Ausgerechneten sekunden?
sollen die einzelnen logonzeiten noch zusammengerechnet werden oder reicht die einzelausgabe?
wäre natürlich einfacher wenn Du gleich im Fragepost [Editierst] und Deine inouttime.txt (oder wie auch immer Deine Logdatei heisst) dahingehend mit den Doppelpunkten entspechend Berichtigst.
Hier erstmal die Auswertung der Logdatei inouttime.txt und wenn IN: bzw OUT: als zustandsbeschreibung des Runlevels von User ist.
Ist Die Art der Ausgabe so OK oder soll das anders dokumentiert / weitergereicht werden?
please Feed back
Gruß Phil
dann setzt Du für die Doppelpunkete einfach hinter die Abfrage in Zeile 09 hinter das erste out die Doppelpunkte.
Beim umrechenen vom Zeitformat soll das wieder zurückgerechnet [HH:MM:SS] werden oder
Geht das mit den Ausgerechneten sekunden?
sollen die einzelnen logonzeiten noch zusammengerechnet werden oder reicht die einzelausgabe?
wäre natürlich einfacher wenn Du gleich im Fragepost [Editierst] und Deine inouttime.txt (oder wie auch immer Deine Logdatei heisst) dahingehend mit den Doppelpunkten entspechend Berichtigst.
Hier erstmal die Auswertung der Logdatei inouttime.txt und wenn IN: bzw OUT: als zustandsbeschreibung des Runlevels von User ist.
@echo off
for /f "useback tokens=1-3" %%i in ("inouttime.txt") do set "time=%%i" & call :rechne %%j "%%k"
pause & goto :eof
:rechne
if %time:~ 6, 1% lss 1 (set sec1=%time:~ -1%) else set sec1=%time:~ 6%
if %time:~ 3, 1% lss 1 (set sec2=%time:~ 4, 1%) else set sec2=%time:~ 3, 2%
if %time:~ 0, 1% lss 1 (set sec3=%time:~ 1, 1%) else set sec3=%time:~ 0, 2%
set /a timei = sec1 + sec2 * 60 + sec3 * 1440
if /i %1 == out: (goto :out ) else goto :in
:out
if not defined ..%~2 set ..%~2=%timei% & goto :eof
:in
if defined ..%~2 (goto :umsetz ) else goto :eof
:umsetz
for /f "tokens=1,2 delims==" %%i in ('set ..') do if "%%i"=="..%~2" (if %timei% gtr %%j (set /a timeo = 86400 + %%j - timei ) else set /a timeo = %%j - timei )
echo %~2 ist %timeo% sekunden angemeldet
set ..%~2=
Ist Die Art der Ausgabe so OK oder soll das anders dokumentiert / weitergereicht werden?
please Feed back
Gruß Phil