Top-Themen

Aktuelle Themen (A bis Z)

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, 3143 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 ..
Ähnliche Inhalte
Batch & Shell
Textdatei splitten in Anzahl Datensätze aus Originaldatei
gelöst Frage von lexuraBatch & Shell7 Kommentare

Guten Tag an die Profis, ich stehe vor einem Problem mit einer .txt Datei. Wir erstellen eine .txt datei ...

Microsoft Office
Sverweis mit mehreren Kriterien
gelöst Frage von Florian86Microsoft Office8 Kommentare

Hallo, ich möchte aus einem 2. Tabellenblatt mit Sverweis und 2 Kriterien einen bestimmten Wert ziehen. Die folgende Formel ...

Batch & Shell
Textdatei aus mehreren .sfx Dateien löschen
gelöst Frage von BustedDiceBatch & Shell3 Kommentare

Hallo zusammen brauch mal wieder Hilfe bei einem Batch.Ich möchte eine .txt mit dem Name hilfe.txt aus ca. 200 ...

XML
XML Datei mit Powershell splitten
gelöst Frage von LianenSchwingerXML2 Kommentare

Hallo, ich habe eine riesige Exportdatei im XML-Format die ich nicht weiterverarbeiten kann. Der Aufbau ist wie folgt: Ich ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless9 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...