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

Frage Entwicklung Batch & Shell

Per Batchdatei Datei in Datei kopieren

Mitglied: Rico55

Rico55 (Level 1) - Jetzt verbinden

11.07.2013 um 16:35 Uhr, 2325 Aufrufe, 12 Kommentare, 3 Danke

Hallo

ich habe eine Textdatei in der sehr große Zeilen drinstehen ( eine Zeile hat 40 Kilobyte)

Diese Datei, nennen wir sie abc.txt die aktuell 1 Zeile beherbergt,
möchte ich exponentiell vergrößern und die logik in der batchfile ablegen.

Ein Beispiel:

In Datei abc.txt steht

a, b , c


Ich hätte gerne dass das Batchskript die Datei abc.txt einließt und wieder in abc.txt reinschreibt.
Dann habe ich beim ersten Durchlauf 2 zeilen, dann 4 ,dann 8 usw...bis 1 millionen

Kann mir da jemand helfen?

Gruß
Mike
Mitglied: MrNetman
11.07.2013 um 18:22 Uhr
Und wann platzt deine Datei?
Eine Million Zeilen mit jeweils 40.000 Zeichen. (4E4 x 1E6 = 4E10)
das ergibt mindestens 40 Gigabyte

Gruß
Netman
Bitte warten ..
Mitglied: Endoro
11.07.2013 um 18:25 Uhr
Hallo Mike,

leider kann batch nur mit Zeichenketten bis 8191 Zeichen umgehen.

lg
Bitte warten ..
Mitglied: Xolger
11.07.2013, aktualisiert 12.07.2013
Hallo Mike,

nicht schön aber funktioniert:
01.
copy 1.txt 2.txt 
02.
copy 1.txt + 2.txt 
03.
del 2.txt
Für Schleifen gibs hier ja genug Beispiele und Experten.
Und bestimmt gibt es auch ne elegante Lösung.


Gruß
Xolger
Bitte warten ..
Mitglied: rubberman
11.07.2013, aktualisiert um 23:45 Uhr
Hallo Mike,

Was ist der tiefere Sinn der Aktion?
Wenn es nur darum gehen sollte eine Datei mit einer bestimmten Größe zu erzeugen, dann hilft dir FSUTIL (benötigt aber Adminrechte).
fsutil file createnew "%userprofile%\desktop\abc.txt" 1000
... erzeugt eine Datei mit 1000 Nullzeichen (=1000 Byte Größe) auf deinem Desktop.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
12.07.2013 um 13:43 Uhr
Hallo,

tieferer Sinn ist wirklich das was ich geschrieben habe...

ich habe eine CSV Datei mit einer Zeile und die hat extrem vielen Spalten (>1000)
Nun möchte ich die Datei nicht irgendwo lagern müssen, weil wie schon richtig bemerkt, sind das 40 GB Platzverschwendung.
Ich möchte das mir ein Skript die Datei on the fly zusammenbaut.

Im SQL würde ich nun einfach ein INSERT INTO table SELECT * from Table machen ... das mache ich 20 mal, dann habe ich 1 Millionen
Datensätze mit 1000 Spalten.
Genau das möchte ich per Batch nun mit der CSV Datei machen - ich möchte eine batchfile mit einer Zeile und 1000 Spalten irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen (damit unser Azubi das auch kann)

Eine neue Anforderung ist zusätzlich, dass der erste Wert pro Zeile nach oben inkrementieren soll, damit ich eine identifizierende ID habe.

Gruß Mike

PS:
Diejenigen die nun sagen "das geht mit batch nicht" ... mir ist es grundsätzlich egal, wenn das mit VB oder Powershell geht, bin ich ganz ohr.
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 14:40 Uhr
Hallo Mike,

Zitat von Rico55:
ich möchte eine batchfile mit einer Zeile und 1000 Spalten
irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen

Meine Batchdateien sind einspaltig und enthalten Programmcode

Wie sollen aus einer Zeile mit 1000 Spalten 1 Mio Datensätze werden?
Hab ich irgendwas verpasst

lg
Bitte warten ..
Mitglied: rubberman
12.07.2013 um 14:46 Uhr
Hallo Mike.

Quick'n'dirty als VBScript:
01.
Option Explicit 
02.
 
03.
Const sFilePath = "abc.csv" 
04.
Const iDataSets = 1000 
05.
 
06.
Const ForWriting = 2 
07.
 
08.
Dim oFSO, oFile, aFirstLine, sLine, i, iID 
09.
 
10.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
11.
aFirstLine = Split(oFSO.OpenTextFile(sFilePath).ReadLine, ",") 
12.
iID = CInt(Trim(aFirstLine(0))) 
13.
sLine = "" 
14.
For i = 1 To UBound(aFirstLine) 
15.
  sLine = sLine & "," & aFirstLine(i) 
16.
Next 
17.
Set oFile = oFSO.OpenTextFile(sFilePath, ForWriting) 
18.
For i = 1 To iDataSets 
19.
  oFile.WriteLine CStr(iID) & sLine 
20.
  iID = iID + 1 
21.
Next 
22.
oFile.Close
Die erste Zeile in meiner "abc.csv" sah so aus:
0,a,b,c
Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 16:53 Uhr
Ich hab es mal mit awk getestet:
C:\TEST>awk -F, -v OFS=, "{for (i=1;i<=10^6;i++) print(i,$0)}" file.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  15:40            41.003 file.csv 
12.07.2013  16:08    41.009.929.900 test.csv
.. und mit einer Mischung aus sed und batch:
C:\TEST>(for /l %a in (1,1,1000000) do @echo(%a)>numbers.csv 
 
C:\TEST>sed "s#.*#s/.*/\&,&/#" file.csv|sed -f - numbers.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  16:20            41.003 file.csv 
12.07.2013  16:20         7.888.896 numbers.csv 
12.07.2013  16:48    41.009.888.896 test.csv
awk war 5 Minuten schneller, kaum zu glauben.

lg
Bitte warten ..
Mitglied: Rico55
15.07.2013 um 13:38 Uhr
Hallo rubberman,

erst mal vielen Dank für deine Mühe - das funktioniert tadellos.

Ich muss das selbe noch für eine Fixed Length CSV machen.
Kannst Du mir da vielleicht noch mal ein Beispiel dazu geben bitte?

Grüße
Mike
Bitte warten ..
Mitglied: rubberman
15.07.2013 um 18:22 Uhr
Hallo Mike,

ich denke schon. Aber kannst du mir "Fixed Length" mal erklären? Was hat denn eine gleichbleibende Länge? Sehe von hier aus leider nicht deinen Bildschirm.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
23.07.2013, aktualisiert um 15:19 Uhr
Moin,

sorry ich warleider zwischendurch erkrankt.

Fixed Length bedeutet das die "Spalten" in der CSV Datei, den Wert des größten dargestellt wertes annehmen.
Heisst wenn du 10 Zeilen hast und eine Spalte A stehen möglicherweise in den ersten neun Zeilen nur 2-3 Buchstaben drin
und im zehnten Datensatz steht eine 1000 BYTE große Zeichenkette => dann ist Spalte A immer 1000 BYTE groß.
DIe ersten 9 Zeilen werden mit Leerzeichen aufgefüllt um auf die 1000 Byte zu kommen.
(http://www.webopedia.com/TERM/F/fixed_length.html
http://wiki.answers.com/Q/What_is_difference_between_fixed_length_recor ...)

Kannst Du mir damit bitte noch helfen?
Irgendwie klappt das bei mir nicht.

Gruß Mike

PS:
ich komme auch schon recht weit

Ich schaffe es aber leider nicht folgende Anforderungen umzusetzen

1) Meine Zeile hat 1000 "Spalten". DIe will ich ungerne von Hand da eingeben.
Die "Spalten" sind nun getrennt durch einen Tab.

2) Ich will nicht alle Spalten auf die selbe fixed length setzen sondern nur z.B. die Spalte
777 auf 100 BYTE.
Bitte warten ..
Mitglied: rubberman
24.07.2013 um 21:27 Uhr
Hallo Mike,

ich weiß nicht ob dir bewusst ist, dass du Äpfel mit Birnen vergleichst.

Eine Datenbank ist ein binäres Gebilde. Dort kannst du den Speicherplatz für verschiedene Datenfelder vordefinieren. Was dann die Datenbanksoftware tut ist abhängig von der Implementation.
Beispielsweise könnte der Speicherbereich die Daten enthalten, die restlichen Bytes sind ausgenullt (mit HEX 0x00 beschrieben).
Oder ein fixer Datenbereich enthält den Wert, der Rest ist zufälliger Datenmüll. Start und Länge des eigentlichen Wertes sind adressiert.

Du möchtest aber nun mit einer CSV Datei arbeiten. CSV ist aber Plaintext, dort funktioniert das nicht! Das einzige, was du tun kannst ist Leerzeichen voran- oder nachzustellen. Stellt sich mir die Frage, welches Benefit du damit erreichst? Leerzeichen sind Zeichen, die dann zum Wert gehörig interpretiert werden und nicht etwa als "Nichts".

Was also ist das Ziel der Aktion??? Was versprichst du dir davon?

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Text per Batchdatei kopieren und einfügen
Frage von imebroBatch & Shell47 Kommentare

Hallo, ich würde gerne für meine Kollegen eine kleine Hilfe basteln Wir nutzen ein Programm, in dem auch Memos ...

Batch & Shell
Batchdatei soll überprüfen, ob auf eine Log Datei
Frage von hoppalaBatch & Shell1 Kommentar

Hiho :) ! Ein Freund und ich haben eine Batchdatei erstellt, leider kommen wir bei einer Sache nicht weiter. ...

Batch & Shell
In Batchdatei mehrere Dateien auswählen
gelöst Frage von DoppellhelixBatch & Shell7 Kommentare

Hallo, ich habe eine Batchdatei, die mir innerhalb einer Logdatei (txt), die Zeilen neu formatiert. Dieses Script funktioniert hervorragend. ...

Microsoft
Dateien kopieren
gelöst Frage von alex53842Microsoft2 Kommentare

Hallo zusammen, wir haben hier ein sehr tolles Phänomen. Eines unserer Dokumentenarchive hat einen kleinen Fehler. Es wurde eingerichtet ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 4 StundenRouter & Routing1 Kommentar

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 11 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 15 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...