AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1530790
Accepted
WinEunuuchs2Unix
WinEunuuchs2Unix
Asked: 2024-10-22 10:06:45 +0800 CST2024-10-22 10:06:45 +0800 CST 2024-10-22 10:06:45 +0800 CST

Totalize e calcule a média de uma coluna de números no terminal rapidamente

  • 772

Esta é uma pergunta auto-respondida. Eu já escrevi uma resposta, mas, se você tiver uma melhor, por favor, poste.

Estou desenvolvendo um programa e ele está imprimindo alguns resultados de tempo:

$ 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

É muito difícil dar uma olhada na lista e obter um tempo médio.

Como posso obter rapidamente o tempo médio?

command-line
  • 4 4 respostas
  • 804 Views

4 respostas

  • Voted
  1. user10489
    2024-10-22T12:55:44+08:002024-10-22T12:55:44+08:00

    Use o awk:

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

    Ou cole os resultados no awk.

    Porém, como você já está executando um script Python, seria melhor apenas adicionar código ao script Python para calcular uma média móvel e imprimi-la com cada valor.

    • 13
  2. Best Answer
    WinEunuuchs2Unix
    2024-10-22T10:06:45+08:002024-10-22T10:06:45+08:00

    1. Copie a coluna de números usando retângulo

    Mantenha pressionada a Ctrltecla e o botão esquerdo do mouse e arraste o mouse para destacar a coluna de números:

    insira a descrição da imagem aqui

    OBSERVAÇÃO: Assim que você destacar o retângulo, ele será copiado para a área de transferência.


    2. Execute o programan

    Em seguida digite n+ Enter.

    insira a descrição da imagem aqui

    Use o botão do meio do mouse para colar da área de transferência. Em seguida, pressione Enterpara contabilizar os resultados.


    3. Instale nno seu sistema

    O nprograma é um script python simples:

    #!/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))
    
    

    Copie o script python acima para um arquivo chamado n. O narquivo deve estar no seu caminho. Se não estiver no seu caminho, você deve chamá-lo com o prefixo do diretório. Por exemplo, você teria que digitar /home/me/stuff/nem vez de apenas n.

    Você precisa sinalizar o nprograma como executável. Por exemplo chmod a+x /home/me/stuff/n.


    4. Resumo

    npegará números copiados não apenas do gnome-terminalLibre Calc, mas também do PyCharm e muitos outros programas que podem ser copiados para a área de transferência do sistema.

    Ter que somar ou calcular a média de um conjunto de números tem sido um PITA para mim por muito tempo. Então, eu preparei este pequeno script em apenas alguns minutos. Escrever este Q & A, na verdade, levou mais tempo :)

    ndeve ser executado em qualquer versão do Python, de 2.7.12a 3.14ou, em outras palavras, do Ubuntu 16.04 até o Ubuntu 24.10.

    Outras Respostas

    Há outras ótimas respostas especificamente adaptadas à pergunta, mas não são robustas. Por exemplo, outro programa exibe a saída da velocidade do WiFi do Linux para o telefone Android 13:

    insira a descrição da imagem aqui

    O nprograma python ainda funciona sem nenhum ajuste nas awkposições de impressão. Além disso, para mim, pelo menos, awké francamente estranho lembrar da sintaxe e dos argumentos. Fazer um script e revisá-lo constantemente com base na posição da coluna não acelera o fluxo de trabalho.

    • 5
  3. kos
    2024-10-22T12:04:28+08:002024-10-22T12:04:28+08:00

    Uma variação da resposta de WinEunuuchs2Unix ;

    Outra maneira seria:

    1. Usando Configurações para vincular um atalho de teclado (no exemplo usei Ctrl+ Alt+ I) à execução de um script em, digamos, ~/bin/crunch_numbers.sh;
    2. Colocando isso em ~/bin/crunch_numbers.sh:
    #!/usr/bin/env bash
    
    xclip -o |
        awk '
            NR==1 {
                min=$1
                max=$1
            }
    
            {
                tot+=$1
                $1<min && min=$1
                $1>max && max=$1
            }
    
            END {
                print "Cnt: "NR+0
                print "Tot: "tot+0
                print "Min: "min+0
                print "Max: "max+0
                print "Avg: "(NR ? tot/NR : 0)
            }
        ' |
        xargs -0 -I{} zenity --info --text={}
    

    Dessa forma, o fluxo de trabalho consistiria apenas em:

    1. Copiando os números usando o truque mostrado na resposta do WinEunuuchs2Unix;
    2. Acertando Ctrl+ Alt+ I.

    A saída pode ser copiada e colada selecionando-a/clicando com o botão direito/clicando em "Copiar", se necessário.

    Uma vantagem desse método é que ele não requer um terminal, o que é útil ao copiar coisas de outro lugar (por exemplo, Calc).

    Uma desvantagem desse método é que tenho quase certeza de que o script do WinEunuuchs2Unix é mais preciso do que o meu script. Se a precisão do ponto flutuante for uma preocupação, provavelmente se deve combinar esse método com o script deles.

    e

    • 2
  4. Marijn
    2024-10-24T02:09:24+08:002024-10-24T02:09:24+08:00

    Uma alternativa é cutselecionar a sexta coluna e jqcalcular a média.

    A frase abaixo permite que você execute o script, veja os resultados conforme eles chegam e calcule a média no final.

    python -u homa.py |tee >(trap '' INT; cut -d" " -f 6|jq -s "add / length")
    
    • python -ué obter a saída sem buffer ao enviá-la para o pipe, para que você ainda possa ver a saída stdoutenquanto ela chega
    • |tee >(...)é duplicar a saída entre stdoute o processamento posterior no pipe
    • trap '' INTé executar o pipe quando você pressiona Ctrl-C(SIGINT) em vez de também matar o pipe antes que ele comece
    • cut -d" " -f 6é dividir as linhas em colunas com espaço como delimitador e mostrando apenas a 6ª coluna
    • jq -s "add / length"adiciona todas as linhas e divide pelo número de linhas

    Script Python usado para testes:

    import random
    import time
    
    while True:
       print(f"Creating instance rd = NetworkInfo(): {random.random()}")
       time.sleep(1)
    

    Exemplo de execução:

    $ python -u homa.py |tee >(trap '' INT; cut -d" " -f 6|jq -s "add / length")
    Creating instance rd = NetworkInfo(): 0.7142522735145004
    Creating instance rd = NetworkInfo(): 0.15049477793122568
    Creating instance rd = NetworkInfo(): 0.8481239436770016
    Creating instance rd = NetworkInfo(): 0.9042829944578701
    Creating instance rd = NetworkInfo(): 0.9699296479456453
    Creating instance rd = NetworkInfo(): 0.3519810376313339
    Creating instance rd = NetworkInfo(): 0.11973047167607598
    ^CTraceback (most recent call last):
      File "homa.py", line 6, in <module>
        time.sleep(1)
    0.5798278781190932
    KeyboardInterrupt
    

    Claro que você também pode copiar a saída com o mouse e usar um comando mais simples para colar o conteúdo da área de transferência no pipe:

    xclip -o|cut -d" " -f 6|jq -s "add / length"
    
    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve