2017-07-04 23 views
-1

awkですでに取得されたフィールドを解析する適切な方法が見つかりません。awkでキャプチャされたフィールドのawk

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

私はデータを収集するために、もう一度、このn番目のフィールドを解析したいと思います:

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

お持ちの場合はawk私はそのように見えるのn番目の要素を収集する使用

任意の提案、あなたはそれを聞くことを喜ぶでしょう

G.

+1

AWKは 'スプリット()'関数を有しています。それがどのように動作するかを知るためにmanページを調べてください。 – Kent

+1

その出力を生成する 'awk'コマンドを投稿してください。 – hek2mgl

+0

ありがとう、私が探していた機能でした。 –

答えて

1

この場合、sトリングはforループにおいて、split EDはaをハッシュするために洗浄、$0に読み出さfileに格納されoutputedれる:

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

説明している:

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

Jamesさん、ありがとうございました。 –

+1

そのスクリプトに固有のGNU awkはありません。また、gsub()の '、$ 0'引数はデフォルトのため、必要ありません。 –