2017-07-21 10 views
2

プログラム出力からデータを読み取るためのBashスクリプトを作成しようとしています。出力形式は次のようである:出力ファイルから情報を読み取る

Net latency average = 55.3649 
minimum = 8 
maximum = 577 
Packet latency average = 56.3409 
minimum = 9 
maximum = 567 

語は、値が「パケット待ち時間」に関連付けられているものでなければならないので、最小値と最大値が出力ファイルに複数回使用され、平均します。私はいくつかの操作をしてファイルに書き戻すために、変数に値を格納したいと思います。

私はsedとawkを試しましたが、それは難しい作業です。 sedので

+2

コードと出力を表示してください。 –

+0

'read avg min max <<<" $(grep -A 2 'パケット待ち時間の平均' input.txt | awk '{ORS = ""; print $ NF}') "' – twalberg

+0

@twalbergあなたの解決策です。ありがとうございました。 – kman

答えて

2

$ packetLatencyMin=$(sed -n '/Packet latency/,/^[A-Z]/{s/minimum = \(.*\)/\1/p}' file) 
$ packetLatencyMax=$(sed -n '/Packet latency/,/^[A-Z]/{s/maximum = \(.*\)/\1/p}' file) 
$ echo $packetLatencyMin 
9 
$ echo $packetLatencyMax 
567 
+0

ほぼ。これは整数(最小値と最大値)で動作しますが、浮動小数点(平均値)では機能しません。さらに、出力ファイルが冗長であるため、2つの結果が得られるという別の問題が見つかりました \t 6(1サンプル) 最初のものだけを選択するにはどうすればよいですか? – kman

1

EX付:

$ cat input.txt 
Net latency average = 55.3649 
minimum = 8 
maximum = 577 
Packet latency average = 56.3409 
minimum = 9 
maximum = 567 
$ cat latency.sh 
#!/bin/bash 

ex input.txt << EOM 
/Packet latency average 
normal kdgg4dwj2dwj2dwA 
wq 
EOM 
$ ./latency.sh 
$ cat input.txt 
56.3409 
9 
567 

元のスクリプトは、VIMのようなコマンドを使用してファイルを変更することができますので、彼らはあなたがすでにVIMを知っていれば、かなり便利です。

関連する問題