PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textmanipulation



standard411
25.09.14, 13:27
Hallo!

Ich habe eine Vielzahl (>1000) kleiner Files, die Messwerte - getrennt durch Tabs - enthalten. Der Name der Files ist immer ein Kuerzel und dann Datum und Uhrzeit (zB Stat_2012-03-21_2248).
Wie kann ich automatisiert den Filenamen (bzw den Datums- und Uhrzeitanteil) in das File hinenschreiben; und zwar an der ersten Position. Das Ergebnis sollte also so aussehen:

2012-03-21 22:48 -> Messwert1 -> Messwert2 -> .... -> Messwert n EOF

Der Name des Files soll unverändert bleiben.

Für Tipps wäre ich sejhr dankbar.

LG, Andreas

marce
25.09.14, 13:48
klingt nach einem Job für find und sed.

Aqualung
25.09.14, 21:48
find . -type f | while read f; do echo "$f" | sed "s/..Stat_//" | tr "_" " " | sed "s/$/ /" | tr -d "\012" > $f.tmp1; cat $f.tmp1 $f > $f.tmp2 ; mv $f.tmp2 $f; rm $f.tmp1;done

Sicherlich nicht besonders schön,nur um einen kleinen Lösungsvorschlag zu bieten.

Erklärung:



"find . -type f" : Suche ab dem aktuellen Verzeichnis rekursiv nach vorhandenen Dateien
" while read f; do": Lies die von find gelieferten Ergebnisse in die Variable "f"
echo "$f" | sed "s/..Stat_//": Ersetze zwei Zeichen(für "./" )+"Stat_" vom Inhalt von f durch nichts
tr "_" " " : ersetze restliche _ durch Leerzeichen
sed "s/$/ /": und klebe ans Ende noch ein Leerzeichen
tr -d "\012" > $f.tmp1: entferne den Zeilenumbruch und schreibe das Ergebnis in die Datei <Dateiname>.tmp1
cat $f.tmp1 $f > $f.tmp2 Schreibe das Ergebnis aus <Dateiname>.tmp1 und anschließend den Inhalt der Datei <Dateiname> in die Datei <Dateiname>.tmp2
mv $f.tmp2 $f; Benenne die temporär-Datei <Dateiname>.tmp2 in die Ursprungsdatei <Dateiname> um
rm $f.tmp1; Lösche die Temporär-Datei <Dateiname>.tmp1
done Ende der while-Schleife


Unterverzeichnisse führen zu unschönen Datumsstempeln und der Zeitstempel hat keinen ":". Darf gerne jemand ergänzen.

Ich würde empfehlen, zunächst den Umbenennungsbefehl (mv) wegzulassen.
Anschleßend mutig laufen lassen und mit STRG-C abbrechen.
Die entstandenen Dateien (.tmp2) händisch prüfen.
Die .tmp2-Dateien löschen, den "mv" wieder rein und happy sein.

Oder an einer Kopie der Daten testen.

SchraubenAnton
19.10.14, 10:11
jap, sehe ich auch so
klingt nach einem Job für find und sed.