2017-03-23 3 views
1

Ich habe die folgende Zeile. Ich kann einen Teil grep aber auch mit der zweiten Portion kämpfen.Grep nur 2 Portionen in einer Linie

Line:

html:<TR><TD>PICK_1</TD><TD>36.0000</TD><TD>1000000</TD><TD>26965</TD><TD>100000000</TD><TD>97074000</TD><TD>2926000</TD><TD>2.926%</TD><TD>97.074%</TD></TR> 

Ich möchte nach die folgenden Ergebnisse haben diese Linie greppen.

PICK_1 97,074%

Derzeit greppen nur ersten Teil über den Befehl folgen.

grep -Po "<TR><TD>[A-Z0-9_]+" test.txt 

Jede mögliche Hilfe schätzen, wie ich über das tun dies gehen kann. Vielen Dank.

Antwort

2

Verwenden awk mit einem Feldtrenn individuellen jeden Rüttler nach Option „-er“ bieten:

awk -F'[<>TDR/]+' '{ print $2, $(NF-1) }' file 

Diese die Linie auf Dinge teilen, die mir wie eine oder mehrere Öffnung schauen oder Schließen <TD> oder <TR> Tags und druckt das zweit- und vorletzte Feld.

Warnung: Dies wird bei fast jeder Eingabe mit Ausnahme der, die Sie angezeigt haben, brechen, da Awk, Grep und Freunde sind für die Verarbeitung von Text, nicht HTML entwickelt.

0

versuchen

grep -e PICK_1 -e "<TR><TD>[A-Z0-9_]+" test.txt 
1

Wenn Sie immer die gleiche Anzahl von Feldern von "TD" Tags abgegrenzt haben, können Sie mit diesem (dirty) versuchen awk:

awk -F'[<TD>|</TD>]' '{print $8 " " $80}' 

oder diese Kombination von column und awk:

column -t -s "</TD>" | awk -F' ' '{print $3 " " $11}' 

Oder mit sed statt column:

sed -e 's/<TD>/ /g' | awk -F' ' '{print $3 " " $11}' 
0
awk -F'[<>]' '{print $5,$(NF-4)}' file 
PICK_1 97.074%