PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inhalt einer Textdatei bearbeiten



frida1234
06-06-2014, 11:50
Hallo zusammen,
ich habe ein Problem bei der Bearbeitung einer Textdatei und bin auf der suche nach Hilfe.
Ich benutze dazu die BASH und meine Textdatei hat folgendes Format:

...nicht relevante Informationen... = STRING: " ip1 ip2 ip3"
...nicht relevante Informationen... = STRING: " ip1 "
...nicht relevante Informationen... = STRING: " ip1 ip2 ip3 ip4"

explizit geht es um die Bearbeitung der IP-Inhalte, die ich mit

cut -d\" -f2

extrahiere und folgendes Format erreiche:

ip1 ip2 ip3
ip1
ip1 ip2 ip3 ip4

Diese Inhalte stellen IP-Adressen dar, genauer gesagt ist ip1 dabei Hop 1 auf einer Route, ip2 Hop 2 auf einer Route und so weiter(es können auch durchaus mehr Hops als 4 auftauchen). Pro Zeile werden also alle Hops einer bestimmten Route aufgelistet.

Ich will nun in eine Datenbank die jeweiligen Hoppositionen eintragen, also nicht die IP-Adressen, sondern nur die Position:
auf dieses Beipsiel angewendet soll dabei

1
2
3
1
1
2
3
4

als Eintrag in die Datenbank herauskommen.
Ich habe schon versucht mit awk '{print NF}' irgendwie weiter zukommen, stehe aber ziemlich auf dem Schlauch.

zst
07-06-2014, 13:37
Du kannst Zeile für Zeile lesen und dann die Anzahl der IPs pro Zeile ermitteln,
also mit: wc -w
Gruß zst

frida1234
10-06-2014, 10:38
Danke für den Hinweis aber wc -w liefert mir im Endeffekt das Gleiche wie awk '{print NF}' .
Ich bin mir sicher, dass ich diese Information(Feldinhalte/Zeile bzw Wörter/Zeile) irgendwie einbauen muss, ich schaffe es allerdings einfach nicht auf das oben beschriebene Format zu gelangen.
Ich würde mich da sehr über Unterstützung freuen.

zst
10-06-2014, 12:22
Wenn Du Zeile für Zeile das wc -w aufrufst, dann kommst Du doch auf Dein angegebenes Format:
1
2
3
1
1
2
3
4
Ich verstehe Deine Frage nicht ...

frida1234
11-06-2014, 07:23
Man würde auf das Format
3
1
4
gelangen, weil die Anzahl der Wörter pro Zeile ausgegeben würden.
Ist auch egal ich habe es jetzt mit zwei Schleifen gelöst.

cat datei1.txt | cut -d\" -f2 > datei2.txt
while read var
do
z=1
for wert in $var
do
wert=z
((z=$z + 1))
echo $wert >> datei3.txt
done
done < datei2.txt

wenn jemand eine elegantere Lösung weiß, bin ich da gerne offen für =)

zst
12-06-2014, 12:24
Bei mir funktioniert Dein Code nicht.

zst
12-06-2014, 12:30
Hier die Lösung mit dem wc -w


#!/bin/bash
cut -d\" -f2 datei1.txt > datei2.txt
while read var
do
for i in $(seq 1 $(echo $var | wc -w))
do
echo "$i " >>datei3.txt
done
done < datei2.txt




cat datei3.txt
1
2
3
1
1
2
3
4

Selene
16-06-2014, 15:16
awk -F \" '{FS=" ";$0=$2;for(i=1;i<=NF;++i)print i;FS="\""}' datei.txt:)