テキストファイルから時間を抽出する

テキストファイルから時間を抽出する

だから私は、テキストファイルに格納されているWebサーバーのpingからラウンドトリップ時間を抽出するシェルスクリプトをLinuxで作成しようとしています。基本的に私が持っているのはテキストファイルです。

    PING e11699.b.akamaiedge.net (104.100.153.112) 56(84) bytes of data.
    64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=1 ttl=60 time=17.2ms
    64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=2 ttl=60 time=12.6ms
    64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=3 ttl=60 time=11.7ms
    ... (a bunch more ping responses here)
    --- e11699.b.akamaiedge.net ping statistics ---
    86400 packets transmitted, 86377 received, 0% packet loss, time 86532481ms
    rtt min/avg/max/mdev = 6.281/18.045/1854.971/28.152 ms, pipe 2

そのため、結局、sedを使用してテキストファイルから17.2、12.6、11.7以上を抽出しようとしました。私のsed行は次​​のとおりです。

    sed 's/.*(time=\([0-9]*\(\.[0-9]*\)\{0,1\}\) ms/\1/' pingoutput.txt | sort -n > sortedtime.txt 

この行は、必要なすべての時間を正常に抽出してソートしますが、pingテキストファイルから不要な数行も抽出します。生成されるテキストファイルは次のとおりです。

--- e11699.b.akamaiedge.net ping statistics ---
86400 packets transmitted, 86377 received, 0% packet loss, time 86532481ms
rtt min/avg/max/mdev = 6.281/18.045/1854.971/28.152 ms, pipe 2
11.7
12.6
17.2
...
86400 packets transmitted, 86377 received, 0% packet loss, time 86532481ms

とにかく、テキストファイルから不要な「---e11699」を「パイプ2」に、「86400パケット」を「86532481ms」行に抽出するのを防ぐ方法がある場合は、あなたの助けに非常に感謝します!

ベストアンサー1

私はこのsedを使用しました:

sed -n 's/.*time=\([0-9].*\)ms.*/\1/p' times | sort -n

サンプルファイル(times)から:

PING e11699.b.akamaiedge.net (104.100.153.112) 56(84) bytes of data.
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=1 ttl=60 time=17.2ms
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=2 ttl=60 time=12.6ms
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=3 ttl=60 time=11.7ms
... (a bunch more ping responses here)
--- e11699.b.akamaiedge.net ping statistics ---
86400 packets transmitted, 86377 received, 0% packet loss, time 86532481ms
rtt min/avg/max/mdev = 6.281/18.045/1854.971/28.152 ms, pipe 2

私は次のような結果を得ます。

sed -n 's/.*time=\([0-9].*\)ms.*/\1/p' times | sort -n
11.7
12.6
17.2


私は-n不要な行を削除するためにこのスイッチを使用しました。からman sed

-n By default, each line of input is echoed to the standard output after all of the commands have been applied to it. The -n option suppresses this behavior.

おすすめ記事