2016-12-04 5 views
1

Ich habe datafile Datei bekam, die mehr oder weniger etwas wie folgt aussieht:Wie drucke ich die letzte Spalte aus einer bestimmten Zeile?

*** some text *** 
Results 
1  50 
2 -75 
3  80 
*** some text *** 

Was ich möchte, ist tun:

  1. Suchen Sie die Zeile, die die Zeichenfolge „Ergebnisse“ enthält.
  2. Listen Sie diese drei Ergebnisse auf, aber nur die letzte Spalte ist signifikant.
  3. Nur die positiven anzeigen.

Ich habe versucht, mein Problem mit awk Befehl zu lösen, die für jedes Ergebnis sieht wie folgt aus:

res1=$(awk '/Results/{nr[NR+1]}; NR in nr' datafile | awk '{print $NF}') 

Ich hoffte, dass die ersten positiven Ergebnisse erhalten von:

If [ $res1 -gt 0 ]; then 
echo "$res1" 
fi 

Aber statt des erwarteten Ergebnisses habe ich den Fehler Integer expression expected. Daraus ergibt sich, dass die Variable res1 kein numerischer Wert ist. Irgendeine Idee, wie man es richtig definiert?

+0

wenn 'res1 =" 50 \ n-75 \ n80 "', die if-Anweisung wird nicht verstehen. Probieren Sie alles in einem awk Anruf aus. –

Antwort

1

So etwas wie dies funktionieren könnte:

$ awk '$0 == "Results" { f = 3; next } f && f-- && $NF > 0 { print $NF }' input 
50 
80 

Grundsätzlich ist die Variable f-3 gesetzt wird, wenn die Leitung Results geben wird.

Dann wird die letzte Spalte der nächsten Zeilen gedruckt, solange f > 0 und $NF > 0$NF die letzte Spalte ist.

Verwandte Themen