Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Datei Zeilen und Spalten mit Shell-Skript auslesen.

Frage Entwicklung Batch & Shell

Mitglied: rique1me

rique1me (Level 1) - Jetzt verbinden

23.07.2009, aktualisiert 13:08 Uhr, 5892 Aufrufe, 4 Kommentare

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:

01.
17:52:20 OUT: user1@srv1 
02.
17:53:41 IN: user1@srv1 
03.
17:55:32 OUT user2@srv2 
04.
17:56:22 OUT user3@srv1 
05.
17:56:56 OUT user1@srv1 
06.
18:00:43 IN user3@srv1 
07.
18:05:09 IN user1@srv1 
08.
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.
Mitglied: pieh-ejdsch
28.07.2009 um 22:05 Uhr
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
01.
@echo off 
02.
for /f "useback tokens=1-3" %%i in ("inouttime.txt") do set "time=%%i" & call :rechne %%j "%%k" 
03.
pause & goto :eof 
04.
:rechne 
05.
if %time:~ 6, 1% lss 1 (set sec1=%time:~ -1%) else set sec1=%time:~ 6% 
06.
if %time:~ 3, 1% lss 1 (set sec2=%time:~ 4, 1%) else set sec2=%time:~ 3, 2% 
07.
if %time:~ 0, 1% lss 1 (set sec3=%time:~ 1, 1%) else set sec3=%time:~ 0, 2% 
08.
set /a timei = sec1 + sec2 * 60 + sec3 * 1440 
09.
if /i %1 == out (goto :out ) else goto :in 
10.
:out 
11.
if not defined ..%~2 set ..%~2=%timei% & goto :eof 
12.
:in 
13.
if defined ..%~2 (goto :umsetz ) else goto :eof 
14.
:umsetz 
15.
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 ) 
16.
echo %~2 ist %timeo% sekunden angemeldet 
17.
set ..%~2=
Gruß Phil
Bitte warten ..
Mitglied: rique1me
29.07.2009 um 10:45 Uhr
Hallo,
danke für deine Idee. Das Problem ist einfach, dass ich das in BASH brauche. Und leider ist hinter IN und OUT ein Doppelpunkt =(
Hoffe ihr könnt mir trotzdem helfen.
Bitte warten ..
Mitglied: pieh-ejdsch
29.07.2009 um 12:19 Uhr
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.
01.
@echo off 
02.
for /f "useback tokens=1-3" %%i in ("inouttime.txt") do set "time=%%i" & call :rechne %%j "%%k" 
03.
pause & goto :eof 
04.
:rechne 
05.
if %time:~ 6, 1% lss 1 (set sec1=%time:~ -1%) else set sec1=%time:~ 6% 
06.
if %time:~ 3, 1% lss 1 (set sec2=%time:~ 4, 1%) else set sec2=%time:~ 3, 2% 
07.
if %time:~ 0, 1% lss 1 (set sec3=%time:~ 1, 1%) else set sec3=%time:~ 0, 2% 
08.
set /a timei = sec1 + sec2 * 60 + sec3 * 1440 
09.
if /i %1 == out: (goto :out ) else goto :in 
10.
:out 
11.
if not defined ..%~2 set ..%~2=%timei% & goto :eof 
12.
:in 
13.
if defined ..%~2 (goto :umsetz ) else goto :eof 
14.
:umsetz 
15.
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 ) 
16.
echo %~2 ist %timeo% sekunden angemeldet 
17.
set ..%~2=
Ist Die Art der Ausgabe so OK oder soll das anders dokumentiert / weitergereicht werden?

please Feed back

Gruß Phil
Bitte warten ..
Mitglied: rique1me
29.07.2009 um 13:27 Uhr
Tut mir leid
hatten gerade Netzausfall, daher hab ich viel um die Ohren.
Das Skript muss nachher unter Linux laufen. Daher Shell-Skript.
Ich teste trotzdem mal, wenn die Zeit da ist, dein Skript.
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Batch & Shell
String aus Spalte in csv auslesen und ersetzen (4)

Frage von mIsSteR zum Thema Batch & Shell ...

Microsoft Office
gelöst Excel: Wenn Wert in Spalte A dann kopiere Zeile (8)

Frage von michi1983 zum Thema Microsoft Office ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Microsoft Office
Office Druck fehler (18)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (11)

Frage von RickTucker zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
Uninitialisierte Festplatte - Daten retten (11)

Frage von peterla zum Thema Festplatten, SSD, Raid ...

Microsoft Office
Outlook 2016 in Ordneransicht starten - GPO (9)

Frage von D-Line zum Thema Microsoft Office ...