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

gelöst Mit Linux am ende einer Datei eine Leerzeile einfügen

Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO

OIOOIOOIOIIOOOIIOIIOIOOO (Level 1) - Jetzt verbinden

17.10.2016 um 15:52 Uhr, 2486 Aufrufe, 30 Kommentare

Tach ihr alle,
Ich wollte mal einen etwas aufwendigen Script schreiben welches via Cronejob zur bestimmten Zeiten ausgeführt werden soll.

Geschweige von anderen Problemen, habe ich das Problem, dass ich nicht wirklich die Möglichkeit finde eine normale Leerzeile am Ende allen Datein einfügen kann.

01.
sed -i '$a\' /samba/ELSendEx20*.txt
Setzt eine Leerzeile welche unter Notepad zusehen ist leider aber auch noch ein Zeilenumbruch welches unter WordPad erkennbar ist. D.h. Ich habe zwei Leerzeilen.

Habt Ihr eine andere Idee?

Wichtig ist, es darf kein Leerzeichen oder sonstiges sein, denn das ist der Anfang für die nächste Datei welche an diese Stelle an gehangen werden soll.

Grüße Ich
30 Antworten
Mitglied: Cloudy
17.10.2016, aktualisiert um 16:02 Uhr
Mit echo kann man einen Zeilenumbruch einfügen:
01.
echo -e -n '\r\n' >> /path/to/file.txt
Einfach \r\n durch den richtigen Escape Sequenz ersetzen, je nach Betriebssystem LINK
Bitte warten ..
Mitglied: Lochkartenstanzer
17.10.2016, aktualisiert um 16:09 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

Setzt eine Leerzeile welche unter Notepad zusehen ist leider aber auch noch ein Zeilenumbruch welches unter WordPad erkennbar ist. D.h. Ich habe zwei Leerzeilen.


Definiere mal, was für Textformat du hast? Und welche Zeilenende-Kodierung dur brauchst? CR CRLF oder nur LF?

Soll einfach nur ein Zeilenende angefügt werden? oder eine ohne zelen ende?

Ansonsten mach man da einfach echo "" >>zieldatei.txt

hint:

  • echo -n -e "\n" >> zieldatei.txt
  • echo -n -e "\r" >> zieldatei.txt
  • echo -n -e "\r\n" >> zieldatei.txt



lks
Bitte warten ..
Mitglied: Pjordorf
17.10.2016 um 16:20 Uhr
Hallo,

Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:
dass ich nicht wirklich die Möglichkeit finde eine normale Leerzeile am Ende allen Datein einfügen kann.
Wenn du eine Leerzeile an deine Datenzeile anfpgst hast du keine leerzeile mehr.

Habt Ihr eine andere Idee?
Wechselst du immer zwichen Unix/Windows hin und her? in beiden OSe wird ein Carriage Return und Line Feed eben anders generiert bzw. grundlegend angewendet.
Auch bei Unix/Linux idte ein CR (Carriage Return) ein CR sowie ein LF (Line Feed) auch ein LF. Es unterscheiden sich nur die fälle wann es angewendet wird.
http://www.cs.toronto.edu/~krueger/csc209h/tut/line-endings.html
https://de.wikipedia.org/wiki/Zeilenumbruch#ASCII
http://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf- ...
http://www.cyberciti.biz/faq/howto-unix-linux-convert-dos-newlines-cr-l ...
http://unix.stackexchange.com/questions/153091/how-to-add-a-carriage-re ...

Notepad = Windows OSe
Notepaddqq = Linux OSe
https://itsfoss.com/notepad-alternatives-for-linux/

Wichtig ist, es darf kein Leerzeichen oder sonstiges sein,
Aber ein LF "\n" oder in Win ein CRLF "\r\n" darf es schon sein.

Gruß,
Peter
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
18.10.2016 um 10:50 Uhr
Zitat von Cloudy:

Mit echo kann man einen Zeilenumbruch einfügen:
01.
echo -e -n '\r\n' >> /path/to/file.txt

[root@xxx]# echo -n -e "\r\n" >> /samba/ELSendEx20*.txt
-bash: /samba/ELSendEx20*.txt: Mehrdeutige Umlenkung.


Zitat von Lochkartenstanzer:
Definiere mal, was für Textformat du hast? Und welche Zeilenende-Kodierung dur brauchst? CR CRLF oder nur LF?

\r\n ist richtig, oder wenn ich es richtig verstanden hab CRLF. Jedoch funktioniert es leider nicht, da die Datein immer anders heißen. Darum hab ich es mit sed probiert.


Zitat von Pjordorf:

Wechselst du immer zwichen Unix/Windows hin und her?

Ja es wird mit Linux und Windows verarbeitet.
Bitte warten ..
Mitglied: Pjordorf
18.10.2016 um 11:52 Uhr
Hallo,

Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:
-bash: /samba/ELSendEx20*.txt: Mehrdeutige Umlenkung.
Dein * sollte dir jetzt mal zu denken geben. Es muss ein eindeutiges Ziel sein und mit * ist es das nicht mehr. Du wirst deine Ziele schon einzeln ansprechen müssen.

\r\n ist richtig, oder wenn ich es richtig verstanden hab CRLF. Jedoch funktioniert es leider nicht, da die Datein immer anders heißen. Darum hab ich es mit sed probiert.
Du solltest dir klar werden wie ein Linux/Unix oder Windows Textdateien / Dateien im allgemeinen handhabt.

Ja es wird mit Linux und Windows verarbeitet.
Und das ist dein Problem.
01.
Bei im Textmodus geöffneten Dateien erfolgt eine Übersetzung von \n in die auf dem jeweiligen System üblichen Steuerzeichen für den Zeilenumbruch. Somit erfolgt in unixartigen Betriebssystem keine Umsetzung, da dort LF bereits für den Zeilenumbruch steht. Dagegen findet unter Windows eine Substitution durch CR LF statt. Die resultierenden Dateien sind folglich nicht identisch. Ist die Datei im Binärmodus geöffnet, erfolgt keine Übersetzung, sondern es wird stets ein LF in die Datei geschrieben.
Beispiel: hier die gleiche Datei welche nur ein 32 0A (SP LF) enthält zwischen dem "1" und dem 2014.

Ansicht im Norton Commander wie es innerhalb der Datei geschrieben ist
unixlinefeed in norton commander - Klicke auf das Bild, um es zu vergrößern

Ansicht im Notepad (Win) - kein Umbruch der Zeile beim Darstellung
unixlinefeed in notepad - Klicke auf das Bild, um es zu vergrößern

Ansicht im Wordpad (Win) - Umbruch der Zeile beim Darstellen
unixlinefeed in wordpad - Klicke auf das Bild, um es zu vergrößern

Linux oder Windows, das ist hier die Frage Wichtig ist also nicht nur das Darstellen sondern auch wie die Datei gespeichert wird.

Gruß,
Peter
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
18.10.2016 um 13:14 Uhr
Ok vielen Dank für deine Erklärung nun habe ich aber zwei Fragen.

Warum erreiche ich mit dem folgendem Befehl das gewünschte Ergebnis in eine Einzelne Datei?:

01.
echo -e -n '\r\n' >> /path/to/file.txt
Wie kann ich das Ergebnis auf unterschiedlich benannte Dateien umlegen?

Es ist ja kein Geheimnis.

unbenannt5 - Klicke auf das Bild, um es zu vergrößern

Die Dateien werden an den rot markierten Stellen unter Linux und Windows gleich dargestellt. Der einzige Unterschied ist unter VIM zusehen in dunkelblau "^M" aber das muss ich ja glücklicherweise nicht anfassen.
Bitte warten ..
Mitglied: Pjordorf
18.10.2016, aktualisiert um 23:07 Uhr
Hallo,

Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:
Warum erreiche ich mit dem folgendem Befehl das gewünschte Ergebnis in eine Einzelne Datei?:
Weil ein >>Pfad\Datei immer am Ende einer Datei anhängt. Wenn die Datei nicht existiert wird eben eine erzeugt zum anhängen Standard Ausgabe umleiten und am Ende anhängen https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Operatoren#.3E ...

Wie kann ich das Ergebnis auf unterschiedlich benannte Dateien umlegen?
Du musst natürlich die Unterschiede deiner OSe beachten. Linux kann und tut ein Zeilenumbruch anders auswerten als ein DOS/Windows. Windows kann nur ein OD OA (CR LF) ohne besondere Anweisungen Korrekt darstellen. Gutes Beispiel ist einmal dein Notepad (Win7 usw) zu nutzen und dann die gleiche Datei mal mit dein Wordpad zu nutzen. Beide stellen ein einziges 0A (LF) anders dar.

Dein Bild zeigt ein Auschnitt einer CSV Datei. Allerding ist hier nicht erkennbar ob es sich um 1 Einen) Datensatz oder gleich mehrer handelt. Wir sehen (durch deinen verwendetes CSV Betrachtungsprogramm) ja gar nicht was an den entscheidenden Stellen tatsächlich innerhalb der Datei gespeichert ist. Auch ein Linux zeigt dir nicht so ohne weiteres diese eben Nicht darstellbaren Zeichen an. Oftmals sieht man noch Hieroglyphen wenn man glück hat. dann sollte man schon wissen wenn man CSV Dateien betrachtet wo denn ein Datensatz afängt oder endet. Nur weil dort nichts zu sehen ist.... Somit ist dein Bild als Informationsgehalt bezüglich eines CR LF (0D 0A) absolut zwecklos.

Die Dateien werden an den rot markierten Stellen unter Linux und Windows gleich dargestellt.
Als was werden die Stellen denn dargestellt? Du weisst das es gar Wortumbrüche, Zeilenumbrüche, Absätze usw. auch in eine einfaches Textdokument geibt wenn das betrachtungsprg. solche Features eingebaut hat. Dazu ist kein Code bzw. Zeichen im Quelltext notwendig. Viele Editoren machen das als Standard - es liesst sich besser, aber sagt nicht wirklich aus was an Zeichen im Quelltext tatsächlich enthalten sind.

Der einzige Unterschied ist unter VIM zusehen in dunkelblau "^M" aber das muss ich ja glücklicherweise nicht anfassen.
Umlaute oder sowas an den Stellen zu Erwarten? Sonderzeichen wie ein ° oder so etwas. Wenn ein VIM meint es nicht darstellen zu können - dann passiert genau dies - du siehst hier dann Hieroglyphen. OS und Editor entsprechend auf verwendeten zeichensatz einstellen...
Hier mal ein anderes Beispiel. Eine Konfig einer Fritte

unixlinefeed notepad mit zeilenumbruch - Klicke auf das Bild, um es zu vergrößern
Dargestellt im Notepad mit Zeilenumbruch

unixlinefeed notepad ohne zeilenumbruch - Klicke auf das Bild, um es zu vergrößern
Dargestellt im Notepad ohne zeilenumbruch

unixlinefeed wordpad ohne zeilenumbruch - Klicke auf das Bild, um es zu vergrößern
Dargestellt in Wordpad ohne Zeilenumbruch

unixlinefeed norton commander ohne zeilenumbruch - Klicke auf das Bild, um es zu vergrößern
Dargestellt im Norton Commander (F4 und Text Modus)

unixlinefeed norton commander hex ansicht - Klicke auf das Bild, um es zu vergrößern
Dargestellt im Norton Commander (F4 und HEX Modus). Hier sieht man tatsächlich was innerhalb der Datei drin steht und wieso ein Zeilenumbruch erfolgt. Das 0A ist der auslöser und diese Datei wurde in ein Linux erzeugt und in Windows versucht darzustellen bzw. zu editieren. Und auch dein >> hat in Windows Probleme beim auffinden der tatsächlichen Zeilenumbrüche wenn dort nicht* ein 0D 0A** steht. Linux geht da anders dran.

Es ist nicht entscheidend was man nicht sieht, entscheidend ist was dort enthalten ist was man nicht sieht.

Nimm mal einen Hexeditor, schreibe in einer leeren Datei direkt 20 mal 07 0D 0A rein, danach speichern und mit Notepad öffnen. Sehen tust du nichts, aber deine Ohren klingel (sofern Lautsprecher etc. Vorhanden und in Betrieb) https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Int ...

Gruß,
Peter
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
19.10.2016 um 08:34 Uhr
Guten Morgen,

verstehe. Danke dir, habe endlich einen Grund gefunden nach einen Hexeneditor für Linux zu suchen. Es ist Kette 0D 0A welche ich brauche.

PS 20x Biep hat nicht funktioniert. :/ Ist jetzt aber nicht das Wesentliche
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
27.12.2016 um 16:30 Uhr
Guten Abend noch einmal.

Irgend wie funktioniert es nicht so wie ich es möchte.

Hat jemand eine Lösung für mich?

SET und ECHO kommt leider nicht in Frage, da die betroffenen Dateien mit nur ersten sechs Zeichen gleich sind, d.H. ich muss Platzhalter * verwenden und das kann weder SET noch ECHO.

Bis jetzt habe ich PERL und AWK probiert, nur fehlt mir hier die passende Operation.

perl -pi -e '{print "\r\n"}' /home/ELSendEx20*.txt

Macht vor jede Zeile eine neue Zeile, gewünscht ist aber am Ende der Datei (eine neue Zeile).

Grüße

Ich
Bitte warten ..
Mitglied: Lochkartenstanzer
27.12.2016 um 16:38 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

SET und ECHO kommt leider nicht in Frage, da die betroffenen Dateien mit nur ersten sechs Zeichen gleich sind, d.H. ich muss Platzhalter * verwenden und das kann weder SET noch ECHO.

Bis jetzt habe ich PERL und AWK probiert, nur fehlt mir hier die passende Operation.

perl -pi -e '{print "\r\n"}' /home/ELSendEx20*.txt


ls /home/ELSendEx20*.txt | xargs -l1 -I PLATZHALTERFUERDATEI echo -n -e "\r\n" >>PLATZHALTERFUERDATEI
lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
27.12.2016 um 16:44 Uhr
Vielen Dank für deine Antwort. Fehlt da nicht noch was?

irgend wie findet es keinen Abschluss.
Bitte warten ..
Mitglied: Lochkartenstanzer
27.12.2016 um 16:54 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

Vielen Dank für deine Antwort. Fehlt da nicht noch was?


Tippfehler: Das schließende "Gänsefüßchen". Hättest aber selbst eigentlich drauf kommen können.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
27.12.2016, aktualisiert um 17:05 Uhr
Ja das habe ich auch gesehen. Das meinte ich nicht. Es erwartet weitere Eingaben. :/

01.
[root@stor ~]# ls /home/ELSendEx20*.txt | xargs -l1 -I PLATZHALTERFUERDATEI echo -n -e "\r\n\" >>PLATZHALTERFUERDATEI
02.
>
03.
>
04.
>
05.
>
06.
> ^C
Bitte warten ..
Mitglied: Lochkartenstanzer
LÖSUNG 27.12.2016 um 19:09 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

Ja das habe ich auch gesehen. Das meinte ich nicht. Es erwartet weitere Eingaben. :/


Dann versuch mal:

ls /home/ELSendEx20*.txt | xargs -l1 -I PLATZHALTERFUERDATEI echo 'echo -n -e "\r\n" >>PLATZHALTERFUERDATEI' | tee echoscript.sh
source echoscript.sh
lks
Bitte warten ..
Mitglied: Lochkartenstanzer
27.12.2016 um 19:12 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

... "\r\n\" ..

muß "\r\n" heißen!


Ein wenig mitdenken hätte ich schon erwartet.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
28.12.2016 um 08:20 Uhr
Tut mir leid. Ich muss mich hier echt auf fremde Hilfe verlassen.

Dank "Pjordorf" habe ich erst über "\r\n" erfahren.

Also jetzt hat es zwar den Befehl beendet und ausgeführt an der originalen Datei hat sich jedoch nichts verändert und es wurde eine neue Datei erstellt namens "PLATZHALTERFUERDATEI" mit vier leereren Zeilen.
Bitte warten ..
Mitglied: Lochkartenstanzer
28.12.2016, aktualisiert um 08:27 Uhr
Liest Du egentlich, was ich schreibe?

Außerdem solltest Du Dir als erstes das zu Gemüte führen, wenn Du bash-skripte verstehen und schreiben willst. Das gehört zu den Grundlagen.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
28.12.2016 um 08:52 Uhr
ooh man, danke dir Ich habe das echo übersehen, Es funktioniert und zwar so wie ich es haben wollte. Auch einen großen Dank für deinen Link. Es sind wirklich coole Informationen dabei. DANKE DANKE
Bitte warten ..
Mitglied: Lochkartenstanzer
28.12.2016 um 09:29 Uhr
Du solltest beachten, daß das nur zwei schnell "hingerotzte" Zeilen ohne Rücksicht auf verluste und ohne sicherheitsgurt und Luftsack sind.

Wenn Du diese Zeilen öfters produktiv einsetzen willst, mußt Du da noch sicherheitsrelevante Abfragen einbauen ob zb die temporäre datei schon existiert

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
28.12.2016 um 09:35 Uhr
Ich lass die "echoscript.sh" nach jedem Ausführen löschen, aber ja du hast recht ich sollte vor dem Ausführen noch prüfen lassen ob diese wirklich nicht da ist. Danke.
Bitte warten ..
Mitglied: Lochkartenstanzer
28.12.2016 um 10:07 Uhr
Du mußt auch sicherstellen, daś die dateinamen keine leer-oder sonderzeichen haben oder diese entsprechend abfangen und daß die dateien keine links sind mit denen man die sytemsicherheit gefährdet.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
28.12.2016, aktualisiert um 14:30 Uhr
Vielen Dank auch für diesen Hinweis. Jetzt habe ich allerdings ein anderes Problem.

Echt alles doof.

Jetzt wo ich eine Schleife gebastelt habe bekommen die Dateien am Ende zwei leerere Zeilen. Die Anzahl der Zeilen erhöht sich mit den Anzahl der Dateien im Verzeichnis.

01.
for file in $MOUNTFOLDER/ELSendEx20*; do
02.
        if [ -f ${file} ] ; then
03.
grep -a -h ';;;01;Lager;;;;' $MOUNTFOLDER/ELSendEx20*.txt > $TOLKORUECK/Rueck$TODAY.txt &&  grep -a -h ';;;02;Biglager;;;;' $MOUNTFOLDER/ELSendEx20*.txt > $MEGARUECK/Rueck$TODAY.txt && ls $MOUNTFOLDER/ELSendEx20*.txt | xargs -l1 -I PLATZHALTERFUERDATEI echo 'echo -n -e "\r\n" >>PLATZHALTERFUERDATEI' | tee /root/echoscript.sh && source /root/echoscript.sh && rm -f /root/echoscript.sh && gawk -F: '{ print $0 }' $MOUNTFOLDER/ELSendEx20*.txt > $BACKUPFOLDER/heute.txt && mv $BACKUPFOLDER/Rueck$BACKUPDATE.txt $BACKUPFOLDER/letzte.txt && cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt && rm $BACKUPFOLDER/letzte.txt
04.
        else
05.
break
06.
fi
07.
done
Den Abschnitt "&& gawk -F: '{ print $0 }' $MOUNTFOLDER/ELSendEx20*.txt > $BACKUPFOLDER/heute.txt && mv $BACKUPFOLDER/Rueck$BACKUPDATE.txt $BACKUPFOLDER/letzte.txt && cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt && rm $BACKUPFOLDER/letzte.txt " kann man auch ignorieren, denn auch ohne wird es nicht besser.
Bitte warten ..
Mitglied: Lochkartenstanzer
28.12.2016 um 14:40 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

for file in $MOUNTFOLDER/ELSendEx20*; do
if [ -f ${file} ] ; then
grep -a -h ';;;01;Lager;;;;' $MOUNTFOLDER/ELSendEx20*.txt ...

Wenn Du schon eien forschleife machst, soltest Du statt der Wildcards "$MOUNTFOLDER/ELSendEx20*.txt einfach nur **$file* nehmen.

Irgendwie ist Deine Programmlogik nicht sauber.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
28.12.2016, aktualisiert um 16:07 Uhr
Das funktionierte mit GREP und GAWK nicht, es hat immer nur eine Zeile aus der Datei gegriffen, daher habe ich es bei ls nicht einmal probiert. Jetzt fügt es mir zwar eine Zeile (0D 0A) zu viel in die "$BACKUPFOLDER/heute.txt" zu viel ein aber damit kann ich gerade noch so leben. Beschäftige mich aber trotzdem damit, das da raus zu bekommen.

Wie ich programmiere ... frag lieber nicht. Ich versuche es erst mal zu verstehen.


EDIT: Nee anders Rueck$BACKUPDATE wird $BACKUPFOLDER/heute.txt an die $BACKUPFOLDER/letzte.txt zwei mal angefügt.

cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt
Bitte warten ..
Mitglied: Pjordorf
28.12.2016 um 17:13 Uhr
Hallo,

Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:
Echt alles doof.
Es mag zwar Intelligent wirken nach möglichkeit alle Befehle in einer Zeile zu packen, aber das ist es nicht. Deine Vorgehensweise ist nicht dazu geeignet einen Fehler zu finden. Du solltest die Art wie du vorgehst aufbrechen bzw. in kleinere Schritte einpacken, dann wäre auch ein einfaches Debuggen deinerseits möglich.
Stelle zuerst fest welche Dateien im Ordner $MOUNTFOLDER/ enthalten sind und vor allem was die Dateien enthalten die du beabsichtigst zu bearbeiten. Nicht das einer deiner unerwünschten \r\n schon zu wirken beginnt. Danach kannst du dann dein erstes Grep laufen lassen und du schaust dir an was in der Datei $TOLKORUECK/Rueck$TODAY.txt nun tatsächlich drinsteht. Erst nachdem hier noch dein gewünschtes Resultat zu erkennen ist mit deinem nächsten Grep weitermachen. Beachte aber: dein verwendetes && zur Befehlsverkettung dürfte immer eine 0 zurückgeben da dein grep ja erfolgreich ausgeführt wird sofern kein Datenträgerfehler plötzlich vorliegt. Das sagt aber nichts über den Inhalt der neu erzeugten Dateien aus. Nutze z.B. Echo $? und IF .... then oder Schleifenstrukturen um deinen Einzeiler aufzubrechen. Siehe auch http://linuxcommand.org/wss0150.php. Und wenn du dann dir die Inhalte deiner erzeugten Dateien ($TOLKORUECK/Rueck$TODAY.txt, $MEGARUECK/Rueck$TODAY.txt, PLATZHALTERFUERDATEI) angeschaut hast (diekt nach der Erzeugung und du dir klar bist warum du einmal ein >> verwendet hast, dann solltest du sehen an welcher Stelle dir die \r\n eingepappt werden.

Es ist nicht alleine damit getan nur Einzeile zu schreiben, du musst die nach 6 Monaten aber auch entschlüßeln können. Daher nutzt man weniger Einzeiler als vielmehr Strukturietes Programmieren um die lesbarkeit für den Menschen zu erhöhen und Kommentare umd zu erklären was man den beabsichtigt. Zur erhöhung der lesbarkeit gehört aber auch das Module, Funktionen, usw. alle auf einer Bildschirmseite appsen sollen ohne zu Scrollen. Das ist teils aufwendiger und schwieriger als nur ein Einzeiler hinzuknallen und andere dazu zu verdonnern meinen Kartoffelsalat wieder in seine Ursprungsteile wieder zurück zu Verwandeln.

Jetzt wo ich eine Schleife gebastelt habe bekommen die Dateien am Ende zwei leerere Zeilen. Die Anzahl der Zeilen erhöht sich mit den Anzahl der Dateien im Verzeichnis.
Fehlersuche nennt sich ein Programm mit 1.000.000 Quellcodezeilen oder ein Bash Einzeiler zu entkäfern (Debuggen). Du kannst auch ein Bash Skript im Debug Modus laufen lassen. Wie? Schau hie mal rein http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Gruß,
Peter
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
29.12.2016 um 14:25 Uhr
Hi,

danke dir Peter. Für mich sollte es einfach nur ein kleiner Script sein welches ein paar Daten aus verschiedenen Daten welche Täglich immer wieder neu kommen, zuerst mit wesentlichem Inhalt an zwei verschiedenen Stellen zu verteilen und die viele Daten aus verschiedenen Dateien dann in eine zusammen zu fassen. Ich dachte es wird ein Sparziergang… Kurze Kommentare sind auch existent. Das was Ihr hier sieht ist nur ein bruchteil der Funktionen. Es währe alles viel einfacher, wenn die Dateien immer gleich heißen wirden, sind sie aber leider nicht.

Jetzt bin unter anderem dank dir und LKS zu verstehen, dass das was ich vor hatte etwas mehr ist als einfach nur ein cp und mv

So nun habe ich die Befehle auf einzelne Zeilen aufgeteilt. Und stellte fest, dass in der Schleife bei dem Befehl „cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt“ die Datei „heute.txt“ so oft eingebunden wird wie es Dateien im Ordner „$MOUNTFOLDER/ELSendEx20*“ gefunden werden.
01.
for file in $MOUNTFOLDER/ELSendEx20*; do 
02.
        if [ -f ${file} ] ; then 
03.
grep -a -h ';;;01;Lager;;;;' $MOUNTFOLDER/ELSendEx20*.txt > $TOLKORUECK/Rueck$TODAY.txt #Kopiert alle Zeilen mit dem Inhalt ;;;01;Lager;;;; (FUNKTIONIERT)
04.
grep -a -h ';;;02;Biglager;;;;' $MOUNTFOLDER/ELSendEx20*.txt > $MEGARUECK/Rueck$TODAY.txt #Kopiert alle Zeilen mit dem Inhalt ;;;02;Biglager;;;; (FUNKTIONIERT)
05.
ls $MOUNTFOLDER/ELSendEx20*.txt | xargs -l1 -I PLATZHALTERFUERDATEI echo 'echo -n -e "\r\n" >>PLATZHALTERFUERDATEI' | tee /root/echoscript.sh
06.
source /root/echoscript.sh
07.
rm -f /root/echoscript.sh
08.
gawk -F: '{ print $0 }' $MOUNTFOLDER/ELSendEx20*.txt > $BACKUPFOLDER/heute.txt
09.
mv $BACKUPFOLDER/Rueck$BACKUPDATE.txt $BACKUPFOLDER/letzte.txt
10.
cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt
11.
rm -f $BACKUPFOLDER/letzte.txt 
12.
        else 
13.
break 
14.
fi 
15.
done
Daher habe ich die schleiffe an der Stelle getrent und eine zusätzliche Abfrage gestartet:

01.
[[ -f $BACKUPFOLDER/letzte.txt ]] && cat $BACKUPFOLDER/letzte.txt $BACKUPFOLDER/heute.txt > $BACKUPFOLDER/Rueck$BACKUPDATE.txt
02.
rm -f $BACKUPFOLDER/letzte.txt
03.
rm -f $MOUNTFOLDER/ELSendEx20*.txt || clear
Es funktioniert. Aber Jetzt habe ich noch ein Problem. Da der Script jede Minute als Cronejob ausgefürt werden soll bekomme ich haufen E-Mails in der /var/spool/mail/root mit dem Inhalt:

01.
TERM environment variable not set.
02.
TERM environment variable not set.
03.
echo -n -e "\r\n" >>/mnt/backup-tmp/ELSendEx20161228155502192.txt
04.
echo -n -e "\r\n" >>/mnt/backup-tmp/ELSendEx20161228155502317.txt
Wie kann ich das unterbinden ohne die Datei selbst zu löschen?
Bitte warten ..
Mitglied: Lochkartenstanzer
29.12.2016 um 14:44 Uhr
Zitat von Pjordorf:

Hallo,

Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:
Echt alles doof.
Es mag zwar Intelligent wirken nach möglichkeit alle Befehle in einer Zeile zu packen, aber das ist es nicht.

Genauer geasgt: Einzeiler nimmt man für "one-time-shots", als für Fälle, die man nur ein einiges Mal braucht und dann nicht mehr. Da ist es dann unerheblich, ob man die Logik später nochmal versteht oder nicht.

Für cronjobs oder wiederkehrende Aufgaben gibt man sich (hoffentlich) mehr Mühe und schaut, daß man sie selbst in 5 Jahren imemr noch nachvollziehen kann.

lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
29.12.2016 um 14:50 Uhr
Jup das habt Ihr mir verständlich gemacht

Aber wie lasse ich die Nachrichten verschwinden?
Bitte warten ..
Mitglied: Lochkartenstanzer
29.12.2016, aktualisiert um 15:02 Uhr
Zitat von OIOOIOOIOIIOOOIIOIIOIOOO:

Wie kann ich das unterbinden ohne die Datei selbst zu löschen?

Moin,

Entweder die Ausgabe des Cronjobs in /dev/null oder eine logdatei leiten, z.B. mit

1 2 3 * * /usr/local/cronscripts/cron-script-1.sh  >>/var/log/cron-script-1.log
4 5 6 * * /usr/local/cronscripts/cron-script-2.sh   >/dev/null
lks
Bitte warten ..
Mitglied: OIOOIOOIOIIOOOIIOIIOIOOO
29.12.2016 um 15:02 Uhr
DAAANKE! habe auch gerade das gefunden.

http://www.sysadminslife.com/linux/quicktipp-cron-daemon-mails-deaktivi ...

Vielen lieben Dank.

Andere Frage, würdet Ihr an dem Script etwas ändern? Würdet Ihr das anders schreiben?
Bitte warten ..
Ähnliche Inhalte
Webentwicklung
Wordpress: ob end flush
Frage von BadgerWebentwicklung4 Kommentare

Hallo Leute, ich habe wie viele andere bei Wordpress bei einigen Plugins (z.B. dieses) das Problem, dass bei aktivierten ...

E-Mail
End of Life von P2S
Information von StefanKittelE-Mail4 Kommentare

Hallo, vieleicht hat der Eine oder Andere von Euch ja mal mein Programm P2S bei einem Kunden installiert. P2S ...

Router & Routing
Welcher High-End W-LAN Router?
Frage von JackassRouter & Routing6 Kommentare

Guten Abend wünsch ich, ich hab zu Hause einen Kabel Anschluss von Vodafone (früher Kabel Deutschland; was eine Katastrophe ...

Switche und Hubs
HP PS1810 24G End of support
gelöst Frage von horstvogelSwitche und Hubs5 Kommentare

Hallo, wir haben bei einen HP PS1810 24G. Wo findet man bei HP End of Support? Oder wird das ...

Neue Wissensbeiträge
Administrator.de Feedback
Entwicklertagebuch: Die nächste Version
Information von admtech vor 14 StundenAdministrator.de Feedback4 Kommentare

Hallo Administrator User, vielleicht haben es einige User schon mitbekommen: Wir arbeiten aktuell an einer komplett neuen Version von ...

Windows Server

Active Directory ESE Version Store Changes in Server 2019

Information von Dani vor 4 TagenWindows Server

Moin, Last month at Microsoft Ignite, many exciting new features rolling out in Server 2019 were talked about. But ...

Exchange Server

Microsoft Extending End of Support for Exchange Server 2010

Information von Dani vor 4 TagenExchange Server4 Kommentare

Moin, After investigating and analyzing the deployment state of an extensive number of Exchange customers we have decided to ...

Schulung & Training

Humble Book Bundle: Network and Security Certification 2.0

Tipp von NetzwerkDude vor 4 TagenSchulung & Training

Abend, bei HumbleBundle gibts mal wider ein schönes Paket e-books: sind verschiedene Zertifizierungen wie MCSA, CCNA, CompTIA etc., für ...

Heiß diskutierte Inhalte
Visual Studio
Prüfen, ob Programm schon disposed wurde
Frage von MarcoBornVisual Studio17 Kommentare

Hallo Forum, ich habe in VB.NET ein Programm geschrieben, welches Word startet und dort Daten ausliest. Obwohl ich die ...

DNS
DNS Probleme nach Umstellung auf IPv6
Frage von thunderbird304DNS16 Kommentare

Hi Leute! Folgende Problematik: Umstieg von Glasfaser auf Telekom Buisiness DSL. Durch die Umstellung ist die FritzBox nun Gateway. ...

Netzwerkgrundlagen
Zukunftsicheres Heimnetzwerk aufbauen
Frage von CRO-WarriorNetzwerkgrundlagen15 Kommentare

Hallo Leute. Ich bin dabei das Haus in Kroatien zu renovieren. Da hab ich jetzt die Möglichkeit alles so ...

Speicherkarten
Multi USB Stick erstellen
Frage von Ghost108Speicherkarten15 Kommentare

Guten Morgen zusammen, ich würde gerne einen Multi USB Stick erstellen (bootmöglichkeit mehrer ISOs), welcher sowohl Legacy als auch ...