2017-07-21 193 views
2

我正在嘗試編寫一個Bash腳本來從程序輸出中讀取數據。輸出格式是這樣的:從輸出文件中讀取信息

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

詞的平均,最小和最大使用多次在輸出文件中,以便這些值必須與「分組延遲」相關聯的那些。我想將值存儲在變量中,以便對它們執行一些操作並將它們寫回到文件中。

我嘗試過使用sed和awk,但這是一項艱鉅的任務。

+2

請顯示您的代碼和所需的輸出。 –

+0

'讀取平均最小值<<<「$(grep -A 2'數據包等待時間平均值'input.txt | awk'{ORS =」「; print $ NF}')」' – twalberg

+0

@twalberg您的解決方案正常。謝謝。 – kman

回答

2

使用sed:

$ 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

差不多。它適用於整數(最小值和最大值),但不適用於浮點(平均值)。此外,我發現另一個問題,我得到兩個結果,因爲輸出文件是多餘的 \t 6(1個樣本) 如何只選擇第一個? – kman

1

與前:

$ 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非常有用。