2017-07-04 7 views
-1

Ich kann einen richtigen Weg nicht finden, ein Feld zu analysieren, das bereits von awk abgerufen wurde.awk auf einem Feld von awk eingefangen

Verwenden von awk Ich sammle die n-te Element, das so aussieht:

bbr:(bw:492.2Mbps,mrtt:0.412,pacing_gain:1.25,cwnd_gain:2) 

Ich möchte noch einmal, um diese n-ten Feld analysieren, um die Daten zu sammeln:

$1 = 492.2; 
$2 = 0.41; 
$3 = 1.25; 
$4 = 2; 

Wenn Sie jeder Vorschlag, würden Sie ihn gerne

G.

+1

awk hat 'split()' Funktion. Überprüfe die Manpage, um zu wissen, wie es funktioniert. – Kent

+1

Bitte posten Sie den Befehl 'awk', der diesen Ausgang erzeugt – hek2mgl

+0

Danke Kent, das war die Funktion, nach der ich gesucht habe. –

Antwort

1

In diesem Fall hört die s Tring wird ein file gespeichert ist, zu lesen $0, gereinigt, split ed in einer Schleife fora und outputed hash:

$ awk '{gsub(/^.*\(|\)$/,"");n=split($0,a,/[:,]/);for(i=2;i<=n;i+=2)print a[i]}' file 
492.2Mbps 
0.412 
1.25 
2 

Erklärt:

gsub(/^.*\(|\)$/,"")  # clean outside of parentheses, including them 
n=split($0,a,/[:,]/)  # split to a 
for(i=2;i<=n;i+=2)  # further process every other element in a 
    print a[i]   # you could remove the Mbps and what not here 
+1

Danke James, das habe ich gebraucht. –

+1

Es gibt nichts GNU awk spezifisch über dieses Skript. Außerdem brauchen Sie das Argument ', $ 0' für gsub() nicht, da dies die Standardeinstellung ist. –