H
h.nietnagel
Grünschnabel
Hallo,
ich probiere den ganzen Tag schon mir bestimmte Teile aus einer Riesentextdatei ausgeben und in mehrere kleine Dateien schreiben zu lassen.
Diese Riesentextdatei enthält ein paar Zeilen mit Text und wird in unregelmäßigen Abständen mit einer Art Kopfzeile unterbrochen. Diese Kopfzeilen verwende ich als Erkennungsmerkmal für die Zeilen. In diesen Kopfzeilen ist jeweils eine der Zahlenfolge aus dem arrayEins enthalten und jede dieser Zahlenfolgen, d.h. 001 z.B., tritt insgesamt 4mal in der Datei auf.
Hier der - sicher sehr umständliche - Code:
Das funktioniert auch, bis auf 2 Sachen.
Das erste ist ein Fehler:
Ich hab schon gegoogelt und die Erklärung gefunden, dass es irgendwas mit dem Logarithmus zu tun hat(?) Sorry, ich bin kein Mathegenie
Aber ich finde keine Lösung.
Ich hab schon versucht, nur einfache (also ohne vorangestellte "0") Zahlen in dem arrayEins zu verwenden und dann als ersten Schritt in der Schleife die "00" vor die Zahlen zu setzen. Aber das funktioniert auch nicht.
Ich hab halt den Grund für den Fehler noch nicht verstanden. Und wie kann ich das Problem lösen?
Die zweite Frage betrifft das
Wie kann ich mir die darin enthaltenen Werte aufsteigend sortieren lassen? Geht das überhaupt?
Vielen Dank im Voraus für Hilfe und Tipps!
Schöne Grüße,
Hannes
ich probiere den ganzen Tag schon mir bestimmte Teile aus einer Riesentextdatei ausgeben und in mehrere kleine Dateien schreiben zu lassen.
Diese Riesentextdatei enthält ein paar Zeilen mit Text und wird in unregelmäßigen Abständen mit einer Art Kopfzeile unterbrochen. Diese Kopfzeilen verwende ich als Erkennungsmerkmal für die Zeilen. In diesen Kopfzeilen ist jeweils eine der Zahlenfolge aus dem arrayEins enthalten und jede dieser Zahlenfolgen, d.h. 001 z.B., tritt insgesamt 4mal in der Datei auf.
Hier der - sicher sehr umständliche - Code:
Code:
#!/bin/bash
declare dir=Test
if [ ! -d $dir ]; then
mkdir $dir; fi
arrayEins=(001 002 003 004 005 006 008 009 010 011)
for ((i=0; i<${#arrayEins[@]}; i++))
do
sed -ne '1,20p' test.txt > $dir/tmp.txt
sed '19s/40/4/g' $dir/tmp.txt > $dir/Ergebnis${arrayEins[$i]}Datei.txt
rm $dir/tmp.txt
j=${arrayEins[${i}+1]}
declare -a tmparr
tmparr=("Blabla: blub${arrayEins[$i]}_links" "Blabla: blub${arrayEins[$i]}_rechts" "Blabla: blub${arrayEins[$i]}_oben" "Blabla: blub${arrayEins[$i]}_unten")
declare -a temparr
temparr[0]=`grep -n "${tmparr[0]}" test.txt | tail -1 | cut -d':' -f1`
temparr[1]=`grep -n "${tmparr[1]}" test.txt | tail -1 | cut -d':' -f1`
temparr[2]=`grep -n "${tmparr[2]}" test.txt | tail -1 | cut -d':' -f1`
temparr[3]=`grep -n "${tmparr[3]}" test.txt | tail -1 | cut -d':' -f1`
if [ "${arrayEins[$i]}" -eq 011 ]; then
tmp=`sed -ne '$p' test.txt`
temp=`grep -n "${tmp}" test.txt | tail -1 | cut -d':' -f1`
letzte=`expr ${temp} - 2`
else
tmparr[4]=`grep "Blabla: blub${arrayEins[$j]}" test.txt| head -1 | tail -1`
temparr[4]=`grep -n "${tmparr[4]}" test.txt | tail -1 | cut -d':' -f1`
letzte=`expr ${temparr[4]} - 2`
fi
sed -ne "${temparr[0]},${letzte}p" test.txt >> $dir/Ergebnis${arrayEins[$i]}Datei.txt
done
echo
Das erste ist ein Fehler:
Code:
bash: value too great for base (error token is "008")
Aber ich finde keine Lösung.
Ich hab schon versucht, nur einfache (also ohne vorangestellte "0") Zahlen in dem arrayEins zu verwenden und dann als ersten Schritt in der Schleife die "00" vor die Zahlen zu setzen. Aber das funktioniert auch nicht.
Ich hab halt den Grund für den Fehler noch nicht verstanden. Und wie kann ich das Problem lösen?
Die zweite Frage betrifft das
Code:
temparr
Vielen Dank im Voraus für Hilfe und Tipps!
Schöne Grüße,
Hannes
Zuletzt bearbeitet: