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

Zeilen automatisch vergleichen

Frage Linux

Mitglied: ericdat

ericdat (Level 1) - Jetzt verbinden

24.04.2009, aktualisiert 13:46 Uhr, 3604 Aufrufe, 11 Kommentare

Hallo, ich bin ein Neuling in Linux und wollte ein Shell script schreiben.

Ich habe eine CSV-Datei, die wie folgt aussieht:

major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case100/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case100/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case114/IDU11
major TDMA (1.04893) Wrong rxTm Case114/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case139/IDU14
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case139/IDU14
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case139/IDU14
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case139/IDU14
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case4/IDU15
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case4/IDU15
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case55/IDU13
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case87/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case87/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case87/IDU16
major TDMA (1.08772) WaitExecRxHopBdetEna: timeout Case87/IDU16
minor TDMA (1.00942) ComputeRTT: RTT Case101/IDU11
minor TDMA (1.00942) ComputeRTT: RTT Case101/IDU11
minor TDMA (1.00942) ComputeRTT: RTT Case101/IDU12
minor TDMA (1.00942) ComputeRTT: RTT Case101/IDU12
minor TDMA (1.00942) ComputeRTT: RTT Case101/IDU15
minor TDMA (1.04152) Following suppressed Case106/IDU11
minor TDMA (1.04152) TransmTask: SatMux Case106/IDU11
minor TDMA (1.04152) Following suppressed Case106/IDU15
minor TDMA (1.04152) TransmTask: SatMux Case106/IDU15
minor TDMA (1.00942) ComputeRTT: RTT Case110/IDU13
minor TDMA (1.00942) ComputeRTT: RTT Case110/IDU14
minor TDMA (1.01123) ExtrapolateRtt: extrapol Case110/IDU16
minor TDMA (1.01123) ExtrapolateRtt: extrapol Case110/IDU16
minor TDMA (1.01123) ExtrapolateRtt: extrapol Case110/IDU16
minor TDMA (1.01916) txActPlanGener: txTimeQueue Case136/IDU12
minor TDMA (1.01916) txActPlanGener: txTimeQueue Case136/IDU12
minor TDMA (1.01916) txActPlanGener: txTimeQueue Case136/IDU12
minor TDMA (1.07290) ServerTask: periodic Case17/IDU16
minor TDMA (1.07290) ServerTask: periodic Case18/IDU13
minor TDMA (1.07290) ServerTask: periodic Case3/IDU15
minor TDMA (1.07290) ServerTask: periodic Case32/IDU16
minor TDMA (1.07290) ServerTask: periodic Case61/IDU14
critical TDMA (1.07415) Fallback timeout: Case100/IDU11
critical TDMA (1.07415) Fallback timeout: Case100/IDU13
critical TDMA (1.07415) Fallback timeout: Case100/IDU14
critical TDMA (1.06388) HdlKeepAliveMsg: RxTask Case100/IDU16
critical TDMA (1.06388) HdlKeepAliveMsg: RxTask Case100/IDU16
critical TDMA (1.06388) HdlKeepAliveMsg: RxTask Case100/IDU16
critical TDMA (1.06388) HdlKeepAliveMsg: RxTask Case100/IDU16
critical TDMA (1.07415) Fallback timeout: Case101/IDU11
critical TDMA (1.07415) Fallback timeout: Case101/IDU12
critical TDMA (1.07415) Fallback timeout: Case101/IDU13
critical TDMA (1.07415) Fallback timeout: Case101/IDU14
critical TDMA (1.07415) Fallback timeout: Case101/IDU15
critical TDMA (1.08396) FpgaRxErrInt: rtcTck Case101/IDU16
critical TDMA (1.08396) FpgaRxErrInt: rtcTck Case101/IDU16
critical TDMA (1.08396) FpgaRxErrInt: rtcTck Case101/IDU16
critical TDMA (1.08396) FpgaRxErrInt: rtcTck Case101/IDU16
critical TDMA (1.08396) FpgaRxErrInt: rtcTck Case101/IDU16


Alle Zeilen sollen automatisch mit einnander vergleichen werden, und die Zeilen, die die gleiche ersten vier "spalten" ( z.B: major TDMA (1.04893) Wrong ) haben, in einer neue Datei speichert werden sollen.Und wenn auch gleiche Casex/IDUy -> nur eine Casex/IDUx(und wieviel) speichern

Das erwartetes Ergebnis:

1. major TDMA (1.08772) WaitExecRxHopBdetEna:

Case100/IDU16 x2
Case114/IDU11 x8
Case139/IDU14 x4
Case4/IDU15 x2
Case55/IDU13
Case87/IDU16 x4
Häufigkeit: 21

2. major TDMA (1.04893) Wrong rxTm

Case114/IDU16

Häufigkeit: 1

3. minor TDMA (1.00942) ComputeRTT: RTT

Case101/IDU11 x2
...........................................................................
...........................................................................

4. minor TDMA (1.04152) Following suppressed
Case106/IDU11
Case106/IDU15
Häufigkeit: 2

5. minor TDMA (1.04152) TransmTask: SatMux
Case106/IDU11
Case106/IDU15
Häufigkeit: 2
.........................................................................
.........................................................................


Danke im voraus und Gruß
Mitglied: LotPings
24.04.2009 um 15:00 Uhr
Hallo ericdat,

du möchtest selbst ein Script schreiben und hast detaillierte Anforderungen.
Aus Erfahrung weiss ich, das man lernt wenn man sich selber hineinkniet. Mit meinen bescheidenen bash Kenntnissen helfe ich gerne weiter, wenn Du an einer Stelle nicht weiterkommst - aber es soll ja dein Script sein.

Ich glaube das du mit awk deine Anforderungen eher erfüllen kannst, aber mir fehlt im Moment die Zeit/das Interesse mich da genauer einzulesen.

Gruß
LotPings
Bitte warten ..
Mitglied: ericdat
24.04.2009 um 15:58 Uhr
HI Lotpings,
ich verstehe was du meinst .

Ich habe gerade mit Linux angefangt um eine Aufgabe zu lösen. ich habe 600 logfiles in verschiedene Ordner (Case1...190 / IDU1...6), und jede Logfile könnte Fehlermeldungen haben. Diese Fehlermeldungen sollen in einer Datei aufgelistet ( wo hat der Fehler aufgetaucht /Case?/IDU?, Häufigkeit?) Die Fehlermeldungen sind in 4 Stufen geteilt: major minor critical und fatal. Unter diese Fehlerstufen gibt noch viele Fehlermeldungen. Das Problem ist, ich weiß nicht, welche Fehler aufgetretten sind. Deshalb habe ich erstmal nach Fehlerstufe gesucht ( das Ergebnis wie oben - bis dieser Stelle kann ich nicht weiterkommen). Diese Fehlermeldungen sollen jetzt feiner sortieren ( nicht nach Fehlerstufe sondern nach bestimmte Fehlermeldungen). Und mit nur 3 Tage mit Linux zu arbeiten kann ich das nicht machen und kenne ich auch nicht , ob es in Linux ein Befehl dieses Problem zu lösen. Vielleicht du hast gedacht, dass ich nur den Script brauche aber so ist das nicht.

Vielleicht ist hier jemand Zeit und Lust hat, mich zu erklären/zeigen, wie ich das machen kann.
Sorry für mein Deutsch aber ich hoffe, das ihr verstehen kann.

Danke & Gruß
Bitte warten ..
Mitglied: hmarkus
25.04.2009 um 08:55 Uhr
Guten Morgen ericdat,

also ich empfehle Dir erstmal zu verstehen, was die Fehlermeldungen überhaupt bedeuten. Da kann Google ganz hilfreich sein.
Allein durch sortieren der Fehlermeldungen wirst Du Dein Problem nicht lösen können.

Gruß

Markus
Bitte warten ..
Mitglied: LotPings
25.04.2009 um 10:39 Uhr
Hallo ericdat,

für das Analysieren von Logfiles gibt es Tools, Such mal mit deiner Suchmaschine nach Syslog analysis. (Auch wenn deinen Zeilen ein Zeitstempel fehlt)

Gruß
LotPings
Bitte warten ..
Mitglied: 76109
25.04.2009 um 13:05 Uhr
Hallo ericdat,

anhand Deiner Vorgaben, habe ich mal folgendes VB-Script zusammengebastelt.
Die Pfadangaben müssen natürlich entsprechend angepasst werden.

01.
Option Explicit 
02.
 
03.
Const iPath = "F:\Test\Import.Csv" 
04.
Const ePath = "F:\Test\Export.Txt" 
05.
 
06.
Const adVarChar = 200 
07.
Const adFldIsNullable = 32 
08.
 
09.
Dim Fso, iFile, eFile, i, ix, DataRec, Text, TextMsg, CaseMsg, TextCnt, CaseCnt, SumCnt 
10.
 
11.
 
12.
'Main Beg 
13.
 
14.
 
15.
    Set Fso = CreateObject("Scripting.FileSystemObject") 
16.
 
17.
    Set iFile = Fso.OpenTextFile(iPath) 
18.
 
19.
    Call OpenRecordset 
20.
     
21.
    Do Until iFile.AtEndOfStream 
22.
        ix = Split(iFile.ReadLine) 
23.
        If UBound(ix) = 5 Then Call WriteRecordset 
24.
    Loop 
25.
     
26.
    iFile.Close 
27.
     
28.
    Set eFile = Fso.CreateTextFile(ePath) 
29.
     
30.
    With DataRec 
31.
       .Sort = "Sp1, Sp3, Sp4" 
32.
       .MoveFirst 
33.
        TextMsg = "":  CaseMsg = "":  TextCnt = 0 
34.
        Do Until DataRec.EOF 
35.
            For i = 0 To 5:  ix(i) = .Fields(i):  Next 
36.
            Text = ix(0) & " " & ix(1) & " " & ix(2) & " " & ix(3) & " " & ix(4) 
37.
            If TextMsg <> Text Then 
38.
                If CaseMsg <> "" Then eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt 
39.
                If TextMsg <> "" Then eFile.WriteLine vbCrLf & vbTab & "Anzahl: " & SumCnt & vbCrLf 
40.
                TextMsg = Text:  CaseMsg = ix(5):  TextCnt = TextCnt + 1:  CaseCnt = 1:  SumCnt = 1 
41.
                eFile.WriteLine TextCnt & ". " & TextMsg 
42.
            ElseIf CaseMsg <> ix(5) Then 
43.
                eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt 
44.
                CaseMsg = ix(5):  CaseCnt = 1:  SumCnt = SumCnt + 1 
45.
            Else 
46.
                CaseCnt = CaseCnt + 1:  SumCnt = SumCnt + 1 
47.
            End If 
48.
           .MoveNext 
49.
        Loop 
50.
        If CaseMsg <> "" Then 
51.
            eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt 
52.
            eFile.WriteLine vbCrLf & vbTab & "Anzahl: " & SumCnt & vbCrLf 
53.
        End If 
54.
    End With 
55.
     
56.
    eFile.Close:  DataRec.Close 
57.
     
58.
    WScript.Quit 
59.
 
60.
'Main End 
61.
 
62.
 
63.
Private Sub OpenRecordset() 
64.
    Set DataRec = CreateObject("ADOR.Recordset") 
65.
    With DataRec.Fields 
66.
        .Append "Sp1", adVarChar, 32, adFldIsNullable 
67.
        .Append "Sp2", adVarChar, 32, adFldIsNullable 
68.
        .Append "Sp3", adVarChar, 32, adFldIsNullable 
69.
        .Append "Sp4", adVarChar, 64, adFldIsNullable 
70.
        .Append "Sp5", adVarChar, 32, adFldIsNullable 
71.
        .Append "Sp6", adVarChar, 32, adFldIsNullable 
72.
         DataRec.Open 
73.
    End With 
74.
End Sub 
75.
 
76.
 
77.
Private Sub WriteRecordset() 
78.
    With DataRec 
79.
        .AddNew 
80.
         For i = 0 To 5:  .Fields(i) = ix(i):  Next 
81.
        .Update 
82.
    End With 
83.
End Sub

Das Ergebnis in Export.Txt:

01.
1. critical TDMA (1.06388) HdlKeepAliveMsg: RxTask 
02.
	Case100/IDU16	 x 4 
03.
 
04.
	Anzahl: 4 
05.
 
06.
2. critical TDMA (1.07415) Fallback timeout: 
07.
	Case100/IDU11	 x 1 
08.
	Case100/IDU13	 x 1 
09.
	Case100/IDU14	 x 1 
10.
	Case101/IDU11	 x 1 
11.
	Case101/IDU12	 x 1 
12.
	Case101/IDU13	 x 1 
13.
	Case101/IDU14	 x 1 
14.
	Case101/IDU15	 x 1 
15.
 
16.
	Anzahl: 8 
17.
 
18.
3. critical TDMA (1.08396) FpgaRxErrInt: rtcTck 
19.
	Case101/IDU16	 x 5 
20.
 
21.
	Anzahl: 5 
22.
 
23.
4. major TDMA (1.04893) Wrong rxTm 
24.
	Case114/IDU16	 x 1 
25.
 
26.
	Anzahl: 1 
27.
 
28.
5. major TDMA (1.08772) WaitExecRxHopBdetEna: timeout 
29.
	Case100/IDU16	 x 2 
30.
	Case114/IDU11	 x 8 
31.
	Case139/IDU14	 x 4 
32.
	Case4/IDU15	 x 2 
33.
	Case55/IDU13	 x 1 
34.
	Case87/IDU16	 x 4 
35.
 
36.
	Anzahl: 21 
37.
 
38.
6. minor TDMA (1.00942) ComputeRTT: RTT 
39.
	Case101/IDU11	 x 2 
40.
	Case101/IDU12	 x 2 
41.
	Case101/IDU15	 x 1 
42.
	Case110/IDU13	 x 1 
43.
	Case110/IDU14	 x 1 
44.
 
45.
	Anzahl: 7 
46.
 
47.
7. minor TDMA (1.01123) ExtrapolateRtt: extrapol 
48.
	Case110/IDU16	 x 3 
49.
 
50.
	Anzahl: 3 
51.
 
52.
8. minor TDMA (1.01916) txActPlanGener: txTimeQueue 
53.
	Case136/IDU12	 x 3 
54.
 
55.
	Anzahl: 3 
56.
 
57.
9. minor TDMA (1.04152) Following suppressed 
58.
	Case106/IDU11	 x 1 
59.
	Case106/IDU15	 x 1 
60.
 
61.
	Anzahl: 2 
62.
 
63.
10. minor TDMA (1.04152) TransmTask: SatMux 
64.
	Case106/IDU11	 x 1 
65.
	Case106/IDU15	 x 1 
66.
 
67.
	Anzahl: 2 
68.
 
69.
11. minor TDMA (1.07290) ServerTask: periodic 
70.
	Case17/IDU16	 x 1 
71.
	Case18/IDU13	 x 1 
72.
	Case3/IDU15	 x 1 
73.
	Case32/IDU16	 x 1 
74.
	Case61/IDU14	 x 1 
75.
 
76.
	Anzahl: 5
Probiers mal aus.

Gruß Dieter
Bitte warten ..
Mitglied: ericdat
27.04.2009 um 09:35 Uhr
Vielen Dank für eure Antwort!

@76109: ich kann VB-Script nicht *_* aber werde mal probieren. Danke dir ^^
Bitte warten ..
Mitglied: 76109
27.04.2009 um 10:08 Uhr
Hallo ericdat,

jetzt teste erstmal mit verschieden Import.Csv, indem Du den Pfad in den Zeilen 3 und 4 entsprechend definierst und das Script startest.

Im Anschluss kann man es so gestalten, dass Du das Script per Batch mit Argumenten aufrufst. Oder eine InputBox einfügt, die Argumente
abfrägt. Und/oder eine Verknüpfung im Kontext-Menu mit <Senden an><Script> erstellt.

Du kannst auch gerne Fragen stellen

Gruß Dieter
Bitte warten ..
Mitglied: ericdat
27.04.2009 um 16:21 Uhr
Hallo Dieter,

erstmal ein dickes Dank an dir. Dein Ergebnis sieht super aus, genau so wollte ich haben. Aber ich kenne Visual basic nicht deshalb verstehe ich dein Code auch nicht . Ich schreibe gerade eine Shell-Datei unter Linux und bis dieser Stelle kann nicht nicht mehr weiterkommen. awk ist vielleicht eine gute Antwort ???

gruß
Bitte warten ..
Mitglied: 76109
28.04.2009 um 00:27 Uhr
hallo ericdat,

also mit awk, Linux etc. kann ich Dir leider nicht weiterhelfen. Da ich nicht im IT-Bereich tätig bin, beschäftige ich mich auch nicht mit mit
diesen Dingen. Vielleicht kann Dir ja jemand anders den VB-Code in ein anders Format übersetzen. Am besten Du verfasst diesbezüglich
einen neuen Beitrag.

Gruß Dieter
Bitte warten ..
Mitglied: ericdat
28.04.2009 um 17:46 Uhr
Hey Dieter,

ich danke dir trotzdem ... für deine mühe das du mir helfen wolltest.

Gruß
Bitte warten ..
Mitglied: 76109
29.04.2009 um 00:15 Uhr
Hallo ericdat,

gern geschehen

Falls Du aber noch Erklärungen zu den einzelnen Funktionen im VB-Script benötigst, dann melde Dich einfach.


Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst Beim Bestätigen einer Zelle automatisch zwei neue Zeilen einfügen (5)

Frage von striding zum Thema VB for Applications ...

Microsoft Office
Registerkarte in Excel automatisch färben (10)

Frage von ralfkausk zum Thema Microsoft Office ...

Windows Server
Jnlp Endungen mit Java automatisch verknüpfen über GPO (10)

Frage von staybb zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...