Tabelle erst ab bestimmter Spalte anzeigen

L

LarsB

Grünschnabel
Hallo,

ich habe eine Datei, in der eine Tabelle enthalten ist. Die einzelnen Spalten sind durch Leerzeichen getrennt. Per grep habe ich schon die gesuchte Zeile gefunden, soweit so gut.

Eine Zeile ist so aufgebaut, dass erst ein Datum, dann eine Komponente gefolgt von mehreren Werten vorkommt. Anschließend kommt wieder eine Komponente gefolgt von mehreren Werten (Anzahl der Werte nicht immer identisch). Diese Zeile ist mehrere hundert Spalten lang.

Ich muss nun auf einen bestimmten Wert zugreifen, weiß aber nicht, an welcher absoluten Stelle sich dieser befindet, ich kenne nur die relative Position zum Komponentenname.

Meine Idee war es nun, die ersten Spalten der Zeile nicht anzuzeigen, sodass der Komponentenname in Spalte 1 steht.
Nur hier weiß ich nicht weiter.

Wer mir hier weiterhelfen könnte, würde mir den Tag retten :)

Als kleines Extra:
Der Komponentenname ist beispielsweise "Komponente1". In der Spalte wo er sich befindet, steht jedoch oft auch "0123Komponente1".
Trotzdem sollte der Eintrag sich anschließend in Spalte 1 befinden.

Vielen Dank für eure Hilfe! :)
 
Mit awk kannst Du innerhalb einer Zeile auf die einzelnen Felder bequem zugreifen.
Code:
 grep Komponente1 Datei.text | awk '{print $2, $42}'
Ich verstehe an Deiner Beschreibung nicht, was Du mit relativ und absolut meinst. Du sagst, dass erst das Datum und dann die Komponente folgt. Demnach ist Komponente an Position 2 (absolut). Wenn Du nun die Position der gesuchten Spalte relative zu Komponente kennst, kennst Du doch auch die absolute Spalte.
 
Mit awk kannst Du innerhalb einer Zeile auf die einzelnen Felder bequem zugreifen.
Code:
 grep Komponente1 Datei.text | awk '{print $2, $42}'
Ich verstehe an Deiner Beschreibung nicht, was Du mit relativ und absolut meinst. Du sagst, dass erst das Datum und dann die Komponente folgt. Demnach ist Komponente an Position 2 (absolut). Wenn Du nun die Position der gesuchten Spalte relative zu Komponente kennst, kennst Du doch auch die absolute Spalte.
 
Ich meinte damit, dass die Komponente zum Beispiel an 2. Stelle steht, dann bräuchte ich den 3. Wert. Die nächste Komponente steht aber an 15. Stelle, möchte ich den Wert von ihr bräuchte ich also den 16. Wert.

Ist das so verständlicher?
 
Aber Danke, deine Antwort hat mich auf eine Idee gebracht, mit dem awk ein bisschen zu probieren.
Diese Lösung erfüllt meinen Wunsch:


Code:
cat $Datei | grep $1 | tr -s " " | awk '{for (i=1;i<20;i++){zahl += 2; if ( $(zahl) == "Komponente1" ) {print $(zahl+1)}}}'

Jetzt müsste nur noch in der if-Abfrage gelöst werden, dass nicht genau nach Komponente1 gesucht wird sondern so etwas wie

Code:
if ( $(zahl) == "*Komponente1*" )

Gibt es hier zum Beispiel so etwas wie LIKE in SQL?
 
Ja kannst du, ohne die Anführungszeichen:
Code:
if ( $(zahl) == *Komponente1* )
 
Vielen Dank!

Mittlerweile bin ich auf auf diese Lösung gestoßen:

Code:
if ( $(zahl) ~ TTT )

Scheinbar stoße ich nach dem Schreiben einer Frage ziemlich schnell selbst auf die passende Antwort :D

Vielen Dank noch einmal :)
 
Zurück
Oben