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

Textdatei nach bestimmten Kriterien in mehrere Dateien splitten (AWK??!)

Frage Linux Linux Tools

Mitglied: Netznutzer

Netznutzer (Level 1) - Jetzt verbinden

28.11.2012 um 10:13 Uhr, 2827 Aufrufe, 3 Kommentare

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ß
Mitglied: Arano
28.11.2012 um 12:33 Uhr
Tach auch

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
  1. Nicht sonderlich getestet,
  2. verschluckt es die Leerzeilen und
  3. 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
01.
@echo off && setlocal enabledelayedexpansion 
02.
 
03.
set "if=a.txt"                       REM Der Name der INPUT-Datei 
04.
if exist teil-1.txt del teil-1.txt   REM Die drei Ausgabedateien 
05.
if exist teil-2.txt del teil-2.txt   REM   Änderungen müssen auch im 
06.
if exist teil-3.txt del teil-3.txt   REM   weiterem Script gemacht werden !!! 
07.
 
08.
set /a x=1 
09.
set "of=1, 2 und 3" 
10.
 
11.
REM for /f "delims=" %%i in (a.txt) do ( 
12.
REM for /f "delims=\n" %%i in ('findstr /n . "%if%"') do ( 
13.
for /f "delims=" %%i in (%if%) do ( 
14.
    if !x! LEQ 3 ( 
15.
        REM schreibe Zeile 1-3 in die neuen Dateien 
16.
        >>"teil-1.txt" echo.%%i 
17.
        >>"teil-2.txt" echo.%%i 
18.
        >>"teil-3.txt" echo.%%i 
19.
        set "of=1, 2 und 3" 
20.
    ) else if !x! LEQ 5 ( 
21.
        REM schreibe Zeilen 4+5 in die erste neue Datei 
22.
        >>"teil-1.txt" echo.%%i 
23.
        set "of=1" 
24.
    ) else if !x! LEQ 7 ( 
25.
        REM schreibe Zeilen 6+7 in die zweite neue Datei 
26.
        >>"teil-2.txt" echo.%%i 
27.
        set "of=2" 
28.
    ) else if !x! LEQ 9 ( 
29.
        REM schreibe Zeilen 8+9 in die dritte neue Datei 
30.
        >>"teil-3.txt" echo.%%i 
31.
        set "of=3" 
32.
    ) else ( 
33.
        REM schreibe alles ab Zeile 9 (10,11,12,..) in alle neuen Dateien 
34.
        >>"teil-1.txt" echo.%%i 
35.
        >>"teil-2.txt" echo.%%i 
36.
        >>"teil-3.txt" echo.%%i 
37.
        set "of=1, 2 und 3" 
38.
39.
     
40.
    REM gebe info aus 
41.
    echo zeile !x!: "%%i": in Datei: !of! 
42.
    REM erhoehe Zeilenzaehler um eins 
43.
    set /A x +=1 
44.
45.
 
46.
 
47.
pause
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
Bitte warten ..
Mitglied: TsukiSan
28.11.2012, aktualisiert um 14:02 Uhr
Hallo Netznutzer,

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:
01.
Dim FSO 
02.
 
03.
Const DateiName = "C:\" 
04.
 
05.
Set FSO = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
TempData = Split(FSO.OpenTextFile("C:\a.txt", 1).ReadAll, vbCrLf) 
08.
 
09.
For i = 0 To 2 
10.
    DieErsten3Zeilen = DieErsten3Zeilen & TempData(i) & vbCrLf 
11.
Next 
12.
 
13.
b = 1 
14.
For i = 4 To UBound(TempData) 
15.
    temp = temp & TempData(i) & vbCrLf 
16.
    b = b + 1 
17.
    If Not i = UBound(TempData) Then 
18.
        If b = 3 Then 
19.
            On Error Resume Next 
20.
            i = i + 1 
21.
            b = 1 
22.
            temp1 = Split(temp, vbCrLf) 
23.
            temp2 = Split(temp1(0), ">") 
24.
            temp3 = Split(temp2(1), "<") 
25.
            FSO.CreateTextFile(DateiName & temp3(0) & ".txt", True).Write DieErsten3Zeilen & vbCrLf & temp & vbCrLf & TempData((UBound(TempData) - 1)) 
26.
            temp = "" 
27.
        End If 
28.
    End If 
29.
Next 
30.
 
31.
DieErsten3Zeilen = "" 
32.
 
33.
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
Bitte warten ..
Mitglied: Netznutzer
28.11.2012 um 16:01 Uhr
Hallo Arano, Hallo Tsuki,

Seid versichert, ich möchte meine Arbeit nicht von anderen erledigen lassen, noch ihnen unötige Arbeit bereiten Für die Beiden Vorschläge danke ich euch vielmals! Ich werde sie die Tage testen und selbstverständlich verstehen wollen. Dazu Bedarf es meinerseit aber einige Einarbeitungszeit; habt ihr sicher gemerkt ;)

Viele Grüße, Netznutzer
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Linux Tools
CURL mehrere Dateien vom ftp-Server herunterladen (10)

Frage von highpriest zum Thema Linux Tools ...

Windows 7
gelöst Mehrere Dateien in Windows umbenennen mit Batchjob (4)

Frage von Jeduja zum Thema Windows 7 ...

Microsoft Office
Excel VBA "SVERWEIS" über mehrere Dateien in Ordner (2)

Frage von Acht85 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...