这是一个自答题。我已经写了一个答案,但如果你有更好的答案,请发布。
我正在开发一个程序并打印一些时间结果:
$ 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-terminal
Libre Calc、pyCharm 和许多其他可以复制到系统剪贴板的程序中复制数字,还可以从这些程序中复制数字。
长期以来,对一组数字进行加法或计算平均值对我来说一直是一件很麻烦的事。所以我只花了几分钟就写出了这个小脚本。写这个问答实际上花了更长的时间 🙂
n
2.7.12
应该可以在从到Ubuntu 16.04 的任何 Python 版本上运行3.14
,换句话说,从 Ubuntu 16.04 到 Ubuntu 24.10。
1
-
1顺便说一句,无需右键单击 -> 复制。一旦选择了矩形,您就已经复制了它,只需单击鼠标中键即可粘贴。
–
|
的变体;
另一种方法是:
- 使用设置将键盘快捷键(在示例中我使用了++ Ctrl)与脚本的执行绑定在一起,例如;AltI
~/bin/crunch_numbers.sh
- 将其放入
~/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={}
这样,工作流程就仅包括:
- 使用 WinEunuuchs2Unix 的答案中显示的技巧复制数字;
- 点击Ctrl+ Alt+ I。
如果需要,可以通过选择/右键单击/单击“复制”来复制粘贴输出。
这种方法的优点是它不需要终端,这在从其他地方复制东西(例如 Calc)时很有用。
这种方法的一个缺点是,我确信WinEunuuchs2Unix 的脚本比我的脚本更准确。如果担心浮点精度,则应该将此方法与他们的脚本结合使用。
|
|