Hallo,
ich möchte in einer Datei alle Datumseinträge ändern. Und zwar stehen die als z.B
Mrz 26
und ich möchte daraus
2603 machen.
Einige Versuche habe ich schon hiner mir aber es will so richtig nicht funktionieren
Hat vielleicht jemand von euch eine kleine Hilfe für mich?
Vielen Dank erstmal
lilo
suchen und ersetzen
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
Was ähnliches hatte ich mal. Da ich bei >5 Zeilen-shell-Synkrank^Wtax Kopfschmerzen bekomme, hab ich mir was in C gebastelt. Wenns nicht unbedingt sh sein muß, sag Bescheid. Dann tüddel ich dir das schnell passend.
MfG, Klopskuchen
edit. Stehen diese Datumseinträge generell am Zeilenanfang?
MfG, Klopskuchen
edit. Stehen diese Datumseinträge generell am Zeilenanfang?
When all else fails, read the instructions .
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
Code: Select all
#!/bin/sh
# genügend Argumente?
if [ $# -lt 2 ]
then
echo "----------------------------------"
echo "Einzugeben: $0 Datei-alt Datei-neu"
echo "----------------------------------"
exit 1;
fi
# gibt es die zu lesende Datei?
if [ ! -e $1 ]
then
echo "--------------------------------------------"
echo "Aus $1 kann nichts gelesen werden, wie auch?"
echo "$1 gibts ja gar nicht."
echo "--------------------------------------------"
exit 1;
fi
# soll eine vorhandene Datei überschrieben werden?
if [ -e $2 ]
then
echo "--------------------------------"
echo "Die Datei $2 existiert bereits. "
echo "Wirklich dran rumfummeln? "
while :
do
echo
echo "Weitermachen: j"
echo "Abbrechen : n"
read x
case $x in
j) break ;;
n) echo "Abbruch"; exit ;;
*) echo "!Falsche Eingabe!" ;;
esac
done
fi
##############################
# "richtiger" start #
##############################
oldFile=$1
newFile=$2
while read LINE
do
MON=`echo $LINE |cut -c1-3`
YEA=`echo $LINE |cut -c5-6`
END=`echo $LINE |cut -c7-0`
case $MON in
Jan) MON="01" ;;
Feb) MON="02" ;;
Mrz) MON="03" ;;
Apr) MON="04" ;;
Mai) MON="05" ;;
Jun) MON="06" ;;
Jul) MON="07" ;;
Aug) MON="08" ;;
Sep) MON="09" ;;
Okt) MON="10" ;;
Nov) MON="11" ;;
Dez) MON="12" ;;
*) echo "Hier ging was schief, 13. Monat?"
exit 1 ;;
esac
NL=$YEA$MON$END
echo $NL >>$newFile
done < $oldFile
exit 0;
MfG, Klopskuchen
When all else fails, read the instructions .
Hier bin ich wieder. Das Skript ist echt gut. Ein paar Details nur. Diese Datumsangaben wenn die in einer Zeile vorkommen sind die immer an gleiche Stelle. Nur die sind nicht in jeder Zeile.
Und ich würde gerne den kompletten Inhalt der Datei behalten und nur diese Stellen abändern. Das heißt er Zeile für Zeile in der neuen Datei eintragen, und falls an der besagten Stelle das Format vorkommt dann soll es ändern und dann die Zeile in der neuen Datei schreiben.
Beispiel
Diese Zeile ist nur blabla --> Diese soll er unverändert in der neuen Datei einfügen
Diese Zeile hat aber Mrz 30--> Diese soll als "Diese Zeile hat aber 3003" eingefügt werden.
Ich hoffe ich habe es verständlich genug formuliert.
Und ich würde gerne den kompletten Inhalt der Datei behalten und nur diese Stellen abändern. Das heißt er Zeile für Zeile in der neuen Datei eintragen, und falls an der besagten Stelle das Format vorkommt dann soll es ändern und dann die Zeile in der neuen Datei schreiben.
Beispiel
Diese Zeile ist nur blabla --> Diese soll er unverändert in der neuen Datei einfügen
Diese Zeile hat aber Mrz 30--> Diese soll als "Diese Zeile hat aber 3003" eingefügt werden.
Ich hoffe ich habe es verständlich genug formuliert.
Viele Späße
kiko
kiko
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
Der Teil vor dem auskommentierten "start" kann bleiben wie er ist.
Für die Bearbeitung von Textdateien sind solche Frickelskripte nicht das Optimum. Für sowas eignet sich besser (wertungsfrei und in alphabetischer Reihenfolge):
awk: http://www.itbeginner.de/awk.0.html
perl: http://www.perlunity.de/perl/tutorial/index.shtml
python: http://wiki.python.de/
MfG, Klopskuchen
Code: Select all
##############################
# start #
##############################
oldFile=$1
newFile=$2
while read LINE
do
bool=0
MON=`echo $LINE |cut -c1-3`
YEA=`echo $LINE |cut -c5-6`
END=`echo $LINE |cut -c7-0`
case $MON in
Jan) MON="01" ;;
Feb) MON="02" ;;
Mrz) MON="03" ;;
Apr) MON="04" ;;
Mai) MON="05" ;;
Jun) MON="06" ;;
Jul) MON="07" ;;
Aug) MON="08" ;;
Sep) MON="09" ;;
Okt) MON="10" ;;
Nov) MON="11" ;;
Dez) MON="12" ;;
*) bool=1 ;;
esac
if [ bool = 0 ]
then
NL=$YEA$MON$END
echo $NL >>$newFile
else
echo $LINE >>$newFile
fi
done < $oldFile
exit 0;
awk: http://www.itbeginner.de/awk.0.html
perl: http://www.perlunity.de/perl/tutorial/index.shtml
python: http://wiki.python.de/
MfG, Klopskuchen
When all else fails, read the instructions .