Zeilen automatisch vergleichen
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ß
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ß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 114607
Url: https://administrator.de/forum/zeilen-automatisch-vergleichen-114607.html
Ausgedruckt am: 02.05.2025 um 14:05 Uhr
11 Kommentare
Neuester Kommentar

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
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

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
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

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
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

Hallo ericdat,
anhand Deiner Vorgaben, habe ich mal folgendes VB-Script zusammengebastelt.
Die Pfadangaben müssen natürlich entsprechend angepasst werden.
Das Ergebnis in Export.Txt:
Probiers mal aus.
Gruß Dieter
anhand Deiner Vorgaben, habe ich mal folgendes VB-Script zusammengebastelt.
Die Pfadangaben müssen natürlich entsprechend angepasst werden.
Option Explicit
Const iPath = "F:\Test\Import.Csv"
Const ePath = "F:\Test\Export.Txt"
Const adVarChar = 200
Const adFldIsNullable = 32
Dim Fso, iFile, eFile, i, ix, DataRec, Text, TextMsg, CaseMsg, TextCnt, CaseCnt, SumCnt
'Main Beg
Set Fso = CreateObject("Scripting.FileSystemObject")
Set iFile = Fso.OpenTextFile(iPath)
Call OpenRecordset
Do Until iFile.AtEndOfStream
ix = Split(iFile.ReadLine)
If UBound(ix) = 5 Then Call WriteRecordset
Loop
iFile.Close
Set eFile = Fso.CreateTextFile(ePath)
With DataRec
.Sort = "Sp1, Sp3, Sp4"
.MoveFirst
TextMsg = "": CaseMsg = "": TextCnt = 0
Do Until DataRec.EOF
For i = 0 To 5: ix(i) = .Fields(i): Next
Text = ix(0) & " " & ix(1) & " " & ix(2) & " " & ix(3) & " " & ix(4)
If TextMsg <> Text Then
If CaseMsg <> "" Then eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt
If TextMsg <> "" Then eFile.WriteLine vbCrLf & vbTab & "Anzahl: " & SumCnt & vbCrLf
TextMsg = Text: CaseMsg = ix(5): TextCnt = TextCnt + 1: CaseCnt = 1: SumCnt = 1
eFile.WriteLine TextCnt & ". " & TextMsg
ElseIf CaseMsg <> ix(5) Then
eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt
CaseMsg = ix(5): CaseCnt = 1: SumCnt = SumCnt + 1
Else
CaseCnt = CaseCnt + 1: SumCnt = SumCnt + 1
End If
.MoveNext
Loop
If CaseMsg <> "" Then
eFile.WriteLine vbTab & CaseMsg & vbTab & " x " & CaseCnt
eFile.WriteLine vbCrLf & vbTab & "Anzahl: " & SumCnt & vbCrLf
End If
End With
eFile.Close: DataRec.Close
WScript.Quit
'Main End
Private Sub OpenRecordset()
Set DataRec = CreateObject("ADOR.Recordset")
With DataRec.Fields
.Append "Sp1", adVarChar, 32, adFldIsNullable
.Append "Sp2", adVarChar, 32, adFldIsNullable
.Append "Sp3", adVarChar, 32, adFldIsNullable
.Append "Sp4", adVarChar, 64, adFldIsNullable
.Append "Sp5", adVarChar, 32, adFldIsNullable
.Append "Sp6", adVarChar, 32, adFldIsNullable
DataRec.Open
End With
End Sub
Private Sub WriteRecordset()
With DataRec
.AddNew
For i = 0 To 5: .Fields(i) = ix(i): Next
.Update
End With
End Sub
Das Ergebnis in Export.Txt:
1. critical TDMA (1.06388) HdlKeepAliveMsg: RxTask
Case100/IDU16 x 4
Anzahl: 4
2. critical TDMA (1.07415) Fallback timeout:
Case100/IDU11 x 1
Case100/IDU13 x 1
Case100/IDU14 x 1
Case101/IDU11 x 1
Case101/IDU12 x 1
Case101/IDU13 x 1
Case101/IDU14 x 1
Case101/IDU15 x 1
Anzahl: 8
3. critical TDMA (1.08396) FpgaRxErrInt: rtcTck
Case101/IDU16 x 5
Anzahl: 5
4. major TDMA (1.04893) Wrong rxTm
Case114/IDU16 x 1
Anzahl: 1
5. major TDMA (1.08772) WaitExecRxHopBdetEna: timeout
Case100/IDU16 x 2
Case114/IDU11 x 8
Case139/IDU14 x 4
Case4/IDU15 x 2
Case55/IDU13 x 1
Case87/IDU16 x 4
Anzahl: 21
6. minor TDMA (1.00942) ComputeRTT: RTT
Case101/IDU11 x 2
Case101/IDU12 x 2
Case101/IDU15 x 1
Case110/IDU13 x 1
Case110/IDU14 x 1
Anzahl: 7
7. minor TDMA (1.01123) ExtrapolateRtt: extrapol
Case110/IDU16 x 3
Anzahl: 3
8. minor TDMA (1.01916) txActPlanGener: txTimeQueue
Case136/IDU12 x 3
Anzahl: 3
9. minor TDMA (1.04152) Following suppressed
Case106/IDU11 x 1
Case106/IDU15 x 1
Anzahl: 2
10. minor TDMA (1.04152) TransmTask: SatMux
Case106/IDU11 x 1
Case106/IDU15 x 1
Anzahl: 2
11. minor TDMA (1.07290) ServerTask: periodic
Case17/IDU16 x 1
Case18/IDU13 x 1
Case3/IDU15 x 1
Case32/IDU16 x 1
Case61/IDU14 x 1
Anzahl: 5
Probiers mal aus.
Gruß Dieter

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
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

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
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

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
gern geschehen
Falls Du aber noch Erklärungen zu den einzelnen Funktionen im VB-Script benötigst, dann melde Dich einfach.
Gruß Dieter