Textdatei nach bestimmten Kriterien in mehrere Dateien splitten (AWK??!)
Hallo Admin-Gemeinde,
ich versuche schon seit geraumer Zeit eine Lösung für folgendes Problem zu finden. Ich habe eine Textdatei welche wie folgt aufgebaut ist:
1. Zeile Text
2. Zeile Text
3. Zeile Text
<Tag1>Beschreibung1</Tag1>
<Tag2>Beschreibung</Tag2>
<Tag1>Beschreibung2</Tag1>
<Tag2>Beschreibung</Tag2>
<Tag1>Beschreibung3</Tag1>
<Tag2>Beschreibung</Tag2>
letzte Zeile Text
Nun suche ich einen Weg, diese eine Textdatei in drei Textdateien zu splitten mit dem jeweiligen Inhalt:
1. Zeile Text
2. Zeile Text
3. Zeile Text
<Tag1>Beschreibung[x]</Tag1>
<Tag2>Beschreibung</Tag2>
letzte Zeile Text
Idealerweise sollte der Dateinamen aus der Beschreibung+Suffix zwischen <Tag1></Tag1> bestehen.
Mit "awk" habe ich zumindest zwei Befehlsfolgen entdeckt, die mich etwas weiterbringen. An der Kombination scheitere ich leider.
awk "/Rubrik/{n++}{print > f n}" f=Datei Datei.TXT
awk "NR < 4" Datei.TXT
Auch wenn ich hier im Linux-Foum poste. Am Besten wäre es, lief die ganze Sache in einer MS-DOS-Shell. Vielleicht kann mir jemand behilflich sein?
Besten Dank und Gruß
ich versuche schon seit geraumer Zeit eine Lösung für folgendes Problem zu finden. Ich habe eine Textdatei welche wie folgt aufgebaut ist:
1. Zeile Text
2. Zeile Text
3. Zeile Text
<Tag1>Beschreibung1</Tag1>
<Tag2>Beschreibung</Tag2>
<Tag1>Beschreibung2</Tag1>
<Tag2>Beschreibung</Tag2>
<Tag1>Beschreibung3</Tag1>
<Tag2>Beschreibung</Tag2>
letzte Zeile Text
Nun suche ich einen Weg, diese eine Textdatei in drei Textdateien zu splitten mit dem jeweiligen Inhalt:
1. Zeile Text
2. Zeile Text
3. Zeile Text
<Tag1>Beschreibung[x]</Tag1>
<Tag2>Beschreibung</Tag2>
letzte Zeile Text
Idealerweise sollte der Dateinamen aus der Beschreibung+Suffix zwischen <Tag1></Tag1> bestehen.
Mit "awk" habe ich zumindest zwei Befehlsfolgen entdeckt, die mich etwas weiterbringen. An der Kombination scheitere ich leider.
awk "/Rubrik/{n++}{print > f n}" f=Datei Datei.TXT
awk "NR < 4" Datei.TXT
Auch wenn ich hier im Linux-Foum poste. Am Besten wäre es, lief die ganze Sache in einer MS-DOS-Shell. Vielleicht kann mir jemand behilflich sein?
Besten Dank und Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195035
Url: https://administrator.de/forum/textdatei-nach-bestimmten-kriterien-in-mehrere-dateien-splitten-awk-195035.html
Ausgedruckt am: 09.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar
Tach auch

Aber du hast einen glücklichen Tag erwischt !
Normalerweise helfe ich eher jemandem als das ich die Arbeit für ihn erledige... aber ich brauchte was zum ablenken (habe gleich ne theoretische Abschlussprüfung und sitze hier schon ganz hibbelig - ich will looos Oo) und da kam mir deine Frage gerade recht *g*
Allerdings ist es
Aber vielleicht reicht es dir ODER du kannst es noch selber erweitern - sofern es dir so überhaupt nützt !?
Ich muss gleich los, darum "klatsch" ich dir das einfach mal hier hin, viel Spaß und Erfolg, ich muss weg
Die Zeile 41 für die Infoausgabe und die "set "of="-Zeilen können gelöscht werden, dienen nur der Info
Achso, zur Info vielleicht noch !
Das Script geht Zeile für Zeile durch und entscheidet einfach anhand der "Zeilennummer" ob der Zeileninhalt in alle, die erste, zweite oder dritte Datei geschrieben werden soll.
Das ist quasi alles
~Arano
Auch wenn ich hier im Linux-Foum poste. Am Besten wäre es, lief die ganze Sache in einer MS-DOS-Shell. Vielleicht kann mir jemand behilflich sein?
Da frage ich mich, warum man in den __Schuhladen__ gehen sollte um nach modischen __Hosen__ zufragen !? Aber du hast einen glücklichen Tag erwischt !
Normalerweise helfe ich eher jemandem als das ich die Arbeit für ihn erledige... aber ich brauchte was zum ablenken (habe gleich ne theoretische Abschlussprüfung und sitze hier schon ganz hibbelig - ich will looos Oo) und da kam mir deine Frage gerade recht *g*
Allerdings ist es
- Nicht sonderlich getestet,
- verschluckt es die Leerzeilen und
- sind die Dateinamen hart codiert
Aber vielleicht reicht es dir ODER du kannst es noch selber erweitern - sofern es dir so überhaupt nützt !?
Ich muss gleich los, darum "klatsch" ich dir das einfach mal hier hin, viel Spaß und Erfolg, ich muss weg
@echo off && setlocal enabledelayedexpansion
set "if=a.txt" REM Der Name der INPUT-Datei
if exist teil-1.txt del teil-1.txt REM Die drei Ausgabedateien
if exist teil-2.txt del teil-2.txt REM Änderungen müssen auch im
if exist teil-3.txt del teil-3.txt REM weiterem Script gemacht werden !!!
set /a x=1
set "of=1, 2 und 3"
REM for /f "delims=" %%i in (a.txt) do (
REM for /f "delims=\n" %%i in ('findstr /n . "%if%"') do (
for /f "delims=" %%i in (%if%) do (
if !x! LEQ 3 (
REM schreibe Zeile 1-3 in die neuen Dateien
>>"teil-1.txt" echo.%%i
>>"teil-2.txt" echo.%%i
>>"teil-3.txt" echo.%%i
set "of=1, 2 und 3"
) else if !x! LEQ 5 (
REM schreibe Zeilen 4+5 in die erste neue Datei
>>"teil-1.txt" echo.%%i
set "of=1"
) else if !x! LEQ 7 (
REM schreibe Zeilen 6+7 in die zweite neue Datei
>>"teil-2.txt" echo.%%i
set "of=2"
) else if !x! LEQ 9 (
REM schreibe Zeilen 8+9 in die dritte neue Datei
>>"teil-3.txt" echo.%%i
set "of=3"
) else (
REM schreibe alles ab Zeile 9 (10,11,12,..) in alle neuen Dateien
>>"teil-1.txt" echo.%%i
>>"teil-2.txt" echo.%%i
>>"teil-3.txt" echo.%%i
set "of=1, 2 und 3"
)
REM gebe info aus
echo zeile !x!: "%%i": in Datei: !of!
REM erhoehe Zeilenzaehler um eins
set /A x +=1
)
pause
Achso, zur Info vielleicht noch !
Das Script geht Zeile für Zeile durch und entscheidet einfach anhand der "Zeilennummer" ob der Zeileninhalt in alle, die erste, zweite oder dritte Datei geschrieben werden soll.
Das ist quasi alles
~Arano
Hallo Netznutzer,
toller Trick!

@Arano
Wir drücken dir hier einmal in erster Linie die Daumen für heute!!!!
Wird schon schief gehen!
@Netznutzer
Wenn es Windows sein darf und dann auch noch VBS (und ich schliesse mich Arano an, dass wir eigentlich nicht die Arbeit für andere machen!), dann hätte ich diesen Vorschlag für dich:
Aber tu dir selber einen Gefallen und versuche das zu verstehen, was hier gepostet wird. Das macht am meisten Spass!
Viele Grüsse
Tsuki
toller Trick!
Auch wenn ich hier im Linux-Foum poste.....
Arano hat es gut versinnbildlicht @Arano
Wir drücken dir hier einmal in erster Linie die Daumen für heute!!!!
Wird schon schief gehen!
@Netznutzer
Wenn es Windows sein darf und dann auch noch VBS (und ich schliesse mich Arano an, dass wir eigentlich nicht die Arbeit für andere machen!), dann hätte ich diesen Vorschlag für dich:
Dim FSO
Const DateiName = "C:\"
Set FSO = CreateObject("Scripting.FileSystemObject")
TempData = Split(FSO.OpenTextFile("C:\a.txt", 1).ReadAll, vbCrLf)
For i = 0 To 2
DieErsten3Zeilen = DieErsten3Zeilen & TempData(i) & vbCrLf
Next
b = 1
For i = 4 To UBound(TempData)
temp = temp & TempData(i) & vbCrLf
b = b + 1
If Not i = UBound(TempData) Then
If b = 3 Then
On Error Resume Next
i = i + 1
b = 1
temp1 = Split(temp, vbCrLf)
temp2 = Split(temp1(0), ">")
temp3 = Split(temp2(1), "<")
FSO.CreateTextFile(DateiName & temp3(0) & ".txt", True).Write DieErsten3Zeilen & vbCrLf & temp & vbCrLf & TempData((UBound(TempData) - 1))
temp = ""
End If
End If
Next
DieErsten3Zeilen = ""
Set FSO = Nothing
Aber tu dir selber einen Gefallen und versuche das zu verstehen, was hier gepostet wird. Das macht am meisten Spass!
Viele Grüsse
Tsuki