Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Inhalt einer Textdatei bearbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.06.2014
    Beiträge
    3

    Inhalt einer Textdatei bearbeiten

    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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Du kannst Zeile für Zeile lesen und dann die Anzahl der IPs pro Zeile ermitteln,
    also mit: wc -w
    Gruß zst

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.06.2014
    Beiträge
    3
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    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 ...

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.06.2014
    Beiträge
    3
    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 =)

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Bei mir funktioniert Dein Code nicht.

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hier die Lösung mit dem wc -w
    Code:
    #!/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
    Code:
    cat datei3.txt
    1 
    2 
    3 
    1 
    1 
    2 
    3 
    4

  8. #8
    Registrierter Benutzer Avatar von Selene
    Registriert seit
    26.08.2012
    Beiträge
    9
    Code:
    awk -F \" '{FS=" ";$0=$2;for(i=1;i<=NF;++i)print i;FS="\""}' datei.txt

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •