这是一个自答题。我已经写了一个答案,但如果你有更好的答案,请发布。

我正在开发一个程序并打印一些时间结果:

$ homa.py
Creating instance rd = NetworkInfo(): 0.0071680546
Creating instance rd = NetworkInfo(): 0.0083100796
Creating instance rd = NetworkInfo(): 0.0121581554
Creating instance rd = NetworkInfo(): 0.0205171108
Creating instance rd = NetworkInfo(): 0.0067570210
Creating instance rd = NetworkInfo(): 0.0215399265
Creating instance rd = NetworkInfo(): 0.0170729160
Creating instance rd = NetworkInfo(): 0.0088560581
Creating instance rd = NetworkInfo(): 0.0079369545
Creating instance rd = NetworkInfo(): 0.0091099739
Creating instance rd = NetworkInfo(): 0.0085971355
Creating instance rd = NetworkInfo(): 0.0137989521
Creating instance rd = NetworkInfo(): 0.0081419945
Creating instance rd = NetworkInfo(): 0.0090279579
Creating instance rd = NetworkInfo(): 0.0070800781
Creating instance rd = NetworkInfo(): 0.0079300404
^C
homa.py refresh() closed by SIGTERM

看一眼列表并得到平均时间太困难了。

如何才能快速得到平均时间?


最佳答案
3

使用 awk:

homa.py | awk '{x+=$6; n++} END { print x/n}'

或者将结果粘贴到 awk 中。

但是,由于您已经在运行 Python 脚本,所以最好只是向 Python 脚本中添加代码来计算运行平均值并打印每个值。

1

  • 您实际上并不需要增加第二个变量n并使用它NR,表示正在处理的记录数将包含块中已经处理的记录数END,因此您只需homa.py | awk '{x+=$6} END {print x/NR}';也可以使用来实现您的第二个建议(无需触及脚本)homa.py | awk '{x+=$6; print x/NR}'


    – 


1. 使用矩形复制数字列

按住Ctrl键和鼠标左键并拖动鼠标以突出显示数字列:

右键单击“复制”将该列复制到剪贴板。


2. 运行程序n

然后输入n+ Enter

右键单击“粘贴”从剪贴板粘贴。然后按Enter统计结果。


3.n在您的系统上安装

n程序是一个简单的 Python 脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Author: pippim.com
License: GNU GPLv3. (c) 2024
Source: This repository
Description: n - Count, Total, Minimum, Maximum and Average set of numbers.
"""

from __future__ import print_function  # Must be first import
from __future__ import with_statement  # Error handling for file opens
import warnings  # 'warnings' advises which commands aren't supported

print("n - Count, Total, Minimum, Maximum and Average set of numbers.")
print("Paste or input values ('x' + <Enter> to finish):")

n = ""  # Number entered
nl = []  # Number list

while n != 'x':  # Loop until 'x' entered
    try:
        n = input()  # Python 3.x
    except (SyntaxError, NameError):
        n = raw_input()  # Python 2.7.12
    try:
        nl.append(float(n))
    except ValueError:
        break  # A letter was entered

print()
if len(nl) == 0:
    print("Nothing to do. Goodbye.")
    exit()

print("Cnt:", len(nl))
print("Tot:", sum(nl))
print("Min:", min(nl))
print("Max:", max(nl))
print("Avg:", sum(nl) / len(nl))

将上述 Python 脚本复制到名为 的文件中n。该n文件应位于您的路径中。如果不在您的路径中,则必须使用目录前缀来调用它。例如,您必须键入/home/me/stuff/n而不是n

您需要将n程序标记为可执行。例如chmod a+x /home/me/stuff/n


4. 总结

n不仅可以从gnome-terminalLibre Calc、pyCharm 和许多其他可以复制到系统剪贴板的程序中复制数字,还可以从这些程序中复制数字。

长期以来,对一组数字进行加法或计算平均值对我来说一直是一件很麻烦的事。所以我只花了几分钟就写出了这个小脚本。写这个问答实际上花了更长的时间 🙂

n2.7.12应该可以在从到Ubuntu 16.04 的任何 Python 版本上运行3.14,换句话说,从 Ubuntu 16.04 到 Ubuntu 24.10。

1

  • 1
    顺便说一句,无需右键单击 -> 复制。一旦选择了矩形,您就已经复制了它,只需单击鼠标中键即可粘贴。


    – 

的变体

另一种方法是:

  1. 使用设置将键盘快捷键(在示例中我使用了++ Ctrl与脚本的执行绑定在一起,例如AltI~/bin/crunch_numbers.sh
  2. 将其放入~/bin/crunch_numbers.sh
#!/usr/bin/env bash

xclip -o |
    awk '
        NR==1 {
            min=$1
        }

        {
            tot+=$1
            $1<min && min=$1
            $1>max && max=$1
        }

        END {
            print "Cnt: "NR
            print "Tot: "tot
            print "Min: "min
            print "Max: "max
            print "Avg: "tot/NR
        }
    ' |
    xargs -0 -I{} zenity --info --text={}

这样,工作流程就仅包括:

  1. 使用 WinEunuuchs2Unix 的答案中显示的技巧复制数字;
  2. 点击Ctrl+ Alt+ I

如果需要,可以通过选择/右键单击/单击“复制”来复制粘贴输出。

这种方法的优点是它不需要终端,这在从其他地方复制东西(例如 Calc)时很有用。

这种方法的一个缺点是,我确信WinEunuuchs2Unix 的脚本比我的脚本更准确。如果担心浮点精度,则应该将此方法与他们的脚本结合使用。